#help-development

1 messages · Page 564 of 1

swift dew
#

in some rare cases it may happen so

eternal oxide
#

In what situation would you ever be spawnign 50 items in a second?

swift dew
#

okay ty

swift dew
eternal oxide
#

not very rare if you are going to log 50 of them a second

swift dew
#

i think usually 1-5 things are logged per sec, 50 things is a very rare case

eternal oxide
#

I guess my idea of rare differs to yours

#

I'd say a 5% chance is rare

swift dew
#

by rare i meam <1%

#

but imagine if u roll 100+ rngs per sec

eternal oxide
#

less then 1% would mean you are dropping millions of drops per second if you log 1-5

swift dew
#

with 50 players its possible

swift dew
#

also rn i also log semi rare

#

the actual rare drops i need to log may be like 1 per 10-60 sec

#

50 per sec is hypothetical

round finch
#

getDrops?

swift dew
#

to know how much lags it can cause

#

getDrops?

eternal oxide
#

it will all depend on how you save it

swift dew
#

okay ty

subtle folio
#

i guess technically a discord webhook is async

slim wigeon
slim wigeon
#

Is it possible for chickens to spawn in caves?

sullen marlin
#

Don't think so

young knoll
#

Is the standard for custom blocks still the same? Noteblocks, mushroom blocks, string, leaves, and armor stands?

#

Actually I guess it would be display entities over armorstands now

slim wigeon
sullen marlin
#

No

humble tulip
#

Lmfaooo

slim wigeon
#

I think bukkit is illegally sharing your jars

young knoll
#

You mean get bukkit?

#

Yeah everyone is aware

#

I’m not sure how it works legally with spigot itself since spigot is GPL, but it’s definitely a violation of Mojang’s copyright

#

Mojang don’t seem interested in pursuing it though

slim wigeon
zenith gate
#

how would one go about getting coordinates from a config file?

young knoll
#

Locations can be read and written directly

#

If you just want an xyz I believe vector can also be read and written directly

zenith gate
#

is there something specific i need?

#

most things are not working.

slim wigeon
sullen marlin
#

Pretty sure there's getLocation

young knoll
#

There’s getLocation

#

Or there’s get(path, class) for general use

zenith gate
slim wigeon
slim wigeon
slim wigeon
slim wigeon
bold gorge
#

I still can't figure out for my life how to send packets to change a nametag.
Is there a way I can maybe use bukkit api or am I forced into protocollib?

zenith gate
# slim wigeon Tell me if this helps you

not really. getting this error.

Caused by: java.lang.IllegalArgumentException: location

From this method.

public static void teleportToVault(Player player) {
        if(!(playerVaultCheck(player))) return;
        World vault = plugin.getServer().getWorld(player.getName() + "_Vault");
        if(isWorldLoaded(player.getName() + "_Vault")) {
            assert vault != null;
            Location configSpawn = plugin.getConfig().getLocation("Vaults.SpawnLocation");
            vault.setSpawnLocation(configSpawn); // ERROR HERE

            Location spawn = vault.getSpawnLocation();
            player.teleport(spawn);
        } else {
            player.sendMessage(ChatColor.YELLOW + "Loading world... Please wait.");
            loadWorld(player.getName() + "_Vault");

        }
    }
slim wigeon
#

I don't use config.getLocation() if you notice by the files above. I just use Strings and Integers

zenith gate
#

could that be why? should i put like values in the config like this?

Vaults:
  SpawnLocation:
    X: 0
    Y: -50
    Z: 0
#

and grab the integer?

slim wigeon
#

Yes but you need the String for the world

zenith gate
bold gorge
slim wigeon
#

From Main.java Block block = new Location( getServer().getWorld(this.data.getString(section+".Location.World")), this.data.getInt(section+".Location.X"), this.data.getInt(section+".Location.Y"), this.data.getInt(section+".Location.Z") ).getBlock();

bold gorge
#

which you can just put in SpawnLocation too

zenith gate
#

oh yeah vault is the world.

slim wigeon
#

You doing more than thatplayer.getName() + "_Vault"

zenith gate
#

That's the worlds name.

#

Whena. player creates a vault, it is copying a world, changing its name, applying a world border, and a spawn location.

slim wigeon
#

Not listed in the config so this line will always be nullplugin.getConfig().getLocation("Vaults.SpawnLocation")

zenith gate
#

but how am i suppose to list every single vault thats created? there are zero to start with.

#

a player has to get the item or an admin runs the command /vault create

slim wigeon
#

I don't know, not my project. If it was my plugin, I would have got the world name somewhere

zenith gate
#

json config file? Can put every single vault in there, along with the world properties.

slim wigeon
#

yaml config file. Its different from json. But you don't need to add world properties in there. Just the world name and player vault names as well

zenith gate
#

Okay, so why would I need this? not trying to sound like im putting you down, just Why would i need a config file full of all the worlds?

slim wigeon
#

Example, I have a minimap forge mod and its a waypoint system. Now when I go to Nether and set a waypoint there, it disappears when I leave the Nether. The reason it disappears is because you not in that world but how does it know you in that world? Its because it saves the world name to the waypoint entry. Its just if you going to have multi-worlds, saving world names is needed

eternal oxide
zenith gate
zenith gate
eternal oxide
#

Why not put a simple boolean in teh Players PDC to say if they have a vault?

#

no need for any data files/config

zenith gate
# eternal oxide Why not put a simple boolean in teh Players PDC to say if they have a vault?

Uhh because at the time I didnt think about that, and right now when a player tries to join their vault it checks if they have a vault world, I would check if they had a vault by their name and if the world folder existed.

It's not good, and as of right now im just trying to get the basics to work, and after that, I am going to clean up and optimize it a little better.

eternal oxide
#

rather than a boolean you could store an ID, that would allow them to still access the world if they changed their name

zenith gate
#

oh you so right I haven't thought about name changes.

young knoll
#

You could also just use uuid for the world name

eternal oxide
#

isn;t there a world name limit?

zenith gate
#

yes but you can put the world folder into another folder

young knoll
#

I doubt a uuid is too long for a world name

zenith gate
#

Would it be better to unload the world after someone leaves the vault or to keep it open until the server ends.

eternal oxide
#

32 characters I think

#

set the world to not keep spawn in memory and you can safely leave it loaded

zenith gate
bold gorge
#

I still can't figure a way until now because it's funky according to me to change a name tag, 3rd time.
I'm using PL (protocollib) 5.0.0, can someone help?

remote swallow
quaint mantle
#

hey how would i get the uuid of the person using a command, i can't seem to figure it out

remote swallow
#

better to use instanceof tho

quaint mantle
#

ty

remote swallow
#

public boolean onCommand(stuff) {
    if (sender instanceof Player) {
          Player player = (Player) sender;
    }
zenith gate
#
public boolean onCommand(stuff) {
    if (sender instanceof Player player) {
          
    }

can also do this if you want. will work the same.

quaint mantle
remote swallow
bold gorge
#

I recommend just doing this:

if (!(sender instanceof Player player)) return false;
remote swallow
bold gorge
#

or even better, use an annotation-based command framework

#

my personal favorites are Lamp

zenith gate
bold gorge
remote swallow
#

its 16 or 17, dont remember which but only one and above has the variable adding in the if

paper marlin
#

spigot.yml

moved-too-quickly-multiplier: 10

spigot cancells if someone tries to teleport further than 10 blocks how can i get that XYZ before spigot cancells(for my plugin)

cedar pine
#

So in reference to this, this should be the correct item to use, right?

remote swallow
#

that wouldnt give you a pdc item

#

its saved under PublicBukkitValues

strange rain
#

Does spigot have a way to edit nbt directly without nms?

eternal oxide
#

PDC is stored in nbt. but you can;t access nbt ouside the pdc

#

?pdc

river oracle
#

cases for this are few and far between though

young knoll
#

There’s api for pretty much all NBT values

strange rain
#

Who likes dependencies tho

#

Sigh

river oracle
#

me :#

#

I use like 10

strange rain
#

I just hate the idea of having to wait for crap to update

river oracle
strange rain
#

And if you code your plugin around one api and they stop updating it then you have to find a whole new one

river oracle
#

If you cant wait a day or two you have a problem

strange rain
#

And refactor ur code

eternal oxide
#

what nbt are you looking to access?

strange rain
strange rain
river oracle
#

That big depends stop updating

strange rain
#

Me programming in assembly for my Minecraft plugins

strange rain
hybrid spoke
#

you dont want to make everything yourself

#

especially if you dont have any experience on that topic

eternal oxide
#

I like minimal dependencies myself

strange rain
hybrid spoke
eternal oxide
#

But I also have no intention on inventing the wheel again

strange rain
young knoll
#

Real gamers don’t even depend on spigot

strange rain
#

It’s a cycle of learning

hybrid spoke
cedar pine
strange rain
#

If your to scared to delve deeper you’ll struggle with everything

#

You’re

hybrid spoke
#

so yeah no

strange rain
eternal oxide
#

imho learnign through failure is the best way to learn

remote swallow
hybrid spoke
#

you actually do

young knoll
#

PublicBukkitValues is just a container tag

quaint mantle
#

Hey guys i want a /pay system like /pay username 20m

#

how would i do thtat?

dire pumice
#

guys i'm using multiverse to create two seperate worlds, one for tutorial and the other for playing, how can i set up a single player's spawn in survival world after he completes the tutorial??

quaint mantle
dire pumice
#

skript?

quaint mantle
#

yea

remote swallow
#

why are you telling people to use skript in help dev

late sonnet
quaint mantle
remote swallow
#

are you using vault

quaint mantle
#

yea

remote swallow
#

use ends with to determin how much it is, that see if said player has that much, if they do remove the money and give it to the other player

quaint mantle
remote swallow
quaint mantle
#

oh ty

remote swallow
#

essentials has a /pay command, no 20m thing

quaint mantle
#

i want the 20m

#

Also

#

i want to get into spigot deving

#

any sources?

remote swallow
#

do you know java

quaint mantle
#

you would reconmend

hybrid spoke
#

?learnjava

undone axleBOT
quaint mantle
hybrid spoke
#

?jd-s

undone axleBOT
hybrid spoke
cedar pine
#

should I just use a different method to check for specific items to break blocks/get xp

remote swallow
#

just the way you were using the give command

cedar pine
#

Ahh, so rather I'd need to run a command that gives the pick with the acutal pdc data?

remote swallow
#

item{PublicBukkitValues: {"key", "string"}} iirc

slim wigeon
crisp escarp
#

https://paste.gg/p/anonymous/5be7f171ae3b4ce89cf072eaae901834

any1 know what my issue could be?

Im trying to create a plugin that doesn't require you to be in a server with other players, and are able to create local instances of Psuedo IP's using the Citizens API to test for multiple IP-addresses connected, effectively kicking the player, and destroying the npc

cedar pine
#

ohhhh

#

so I need the actual quotations

remote swallow
#

plus the container for it but yeah

cedar pine
#

Okay, understood

#

Thanks chief 🫡

remote swallow
#

np

kind hatch
crisp escarp
#

I want to test functionality

#

So. making an NPC that has the same IP address as me will tell me whether or not it works

quaint mantle
#

i'm trying to make a command where it secretly runs a mc command, and the issue is when i do it, because it uses console it logs it in console and sends it to all operators, is there any way to avoid this? java if (args.length >= 1) { String command1 = String.join(" ", args); System.out.println(command1); Bukkit.dispatchCommand(console, command1);

cedar pine
#

This may be the wrong chat but I cannot figure out the command to spawn the correct pickaxe

echo basalt
#

bros casually trying to make a forceop

quaint mantle
strange rain
quaint mantle
strange rain
#

So your tryna back door someone

quaint mantle
#

nah

strange rain
#

Yah

quaint mantle
#

💯

quaint mantle
# strange rain Gamerules?

yeah, but i couldnt figure out the gamerule change in spigot, i tried what it says on the docs but idk, not many examples of it online

zenith gate
#

@eternal oxide I forgot what you said about leaving the vaults loaded, it was something about not hurting the performance if they were kept loaded so i didnt have to unload them.

strange rain
#

ChatGPT

quaint mantle
#

yeah got it thanks, just foiund one

eternal oxide
strange rain
#

Or one at a time

eternal oxide
#

no point

#

it will just cause lag when he loads

strange rain
#

I thought it was because multiple people were joining and leaving

#

Can you load a world async?

eternal oxide
#

nope, it's world loading, its slow

zenith gate
#

world loading is insanely slow

hybrid spoke
strange rain
#

Alright I got an idea never unload it😊

zenith gate
strange rain
#

Who made Minecraft run so slow

#

I need to talk to them

echo basalt
zenith gate
#

cosmos?

strange rain
#

It’s a frikin block game

echo basalt
zenith gate
young knoll
#

Bugrock

strange rain
#

Inconsistantrock

#

Cough

noble lantern
#

thats bedrocks only selling point is it runs smoother when it runs kek

round finch
#

Petrock?

zenith gate
strange rain
#

Is it even possible to recode Minecraft without destroying everything ever built off it in the history of ever?

hybrid spoke
#

what you mean is refactoring

noble lantern
#

i could do it

strange rain
noble lantern
#

3 weeks

#

||/s||

strange rain
noble lantern
#

redoing it would mean you gotta redo everything lol that wouldnt be fun

#

even for a full game studio

strange rain
#

Still lame :p

young knoll
#

Tis why it gets done in parts

hybrid spoke
strange rain
#

lol i have restarted projects on to many times

young knoll
#

1.20 had a new lighting engine for example

noble lantern
strange rain
remote swallow
#

melatonin

young knoll
strange rain
#

No just 3 cases of Red Bull

echo basalt
#

am I the only one who chugs it like it's a shot?

strange rain
#

I don’t even drink energy drinks

echo basalt
#

picked that habit up when I started drinking them for breakfast

strange rain
#

I’d rather live that extra 2 years

echo basalt
#

I hope I don't

strange rain
#

Need therapy

#

?

hybrid spoke
#

need death

echo basalt
#

probably

#

or just something interesting to do for once that doesn't leave me crippled

strange rain
echo basalt
#

both

strange rain
#

Oh

echo basalt
#

either one solves my problems

#

went paddle-boarding the other day and my legs were sore for a week straight

#

never leaving the house again

strange rain
#

Then do it until it doesn’t hurt!

young knoll
#

If you remove your legs they can’t hurt

echo basalt
#

I also fell face-first and ate seaweed

strange rain
zenith gate
echo basalt
#

phantom pain

zenith gate
#

yes

strange rain
#

liar

echo basalt
#

liar liar pants on fire

zenith gate
#

its because of the nerves. in your legs.

subtle folio
#

is it possible to get a players chat width px?

echo basalt
strange rain
#

I don’t got nerves if it’s gone!

subtle folio
echo basalt
subtle folio
#

you can get other settings and keybinds i though

zenith gate
subtle folio
#

recode mc for me please

echo basalt
#

oh okay

#

5 grand

strange rain
#

Bro my nerves got Bluetooth

subtle folio
#

thanks liaison

zenith gate
echo basalt
#

<3

echo basalt
#

I am still sad

young knoll
#

Phantom pain isn’t guaranteed

#

Roll the dice

subtle folio
#

when coll gets hired he’ll fix it

echo basalt
#

I'm literally the character on my tshirt

subtle folio
#

no way

strange rain
echo basalt
#

this dude

subtle folio
#

are you wearing oh

#

nvm

#

i thought you made your own merch

echo basalt
#

no

strange rain
young knoll
#

Could be genetic

#

Google also seems to suggest it could be related to issues in the spinal cord or brain

strange rain
#

Me when no off topic moment

subtle folio
#

is there a simple way to send a bar that’s the full width of the chat

#

and not going over?

noble lantern
young knoll
#

I generally just assume the default width

subtle folio
#

so I can’t copy this to accompany for all sceeen sixes

young knoll
#

Nop

echo basalt
#

no that's just a general estimation

young knoll
#

You have no way of knowing what their width is

subtle folio
#

damn ok

echo basalt
subtle folio
#

stupid mc

echo basalt
#

somehow this tshirt is whiter than me

subtle folio
#

are you wearing a ski mask in doors

young knoll
#

He’s robbing someone’s place

echo basalt
#

no I wanted to do something funny but ms-paint sucks as a drawing app

subtle folio
#

i see

echo basalt
#

I was gonna go a smiley face with a crown and a big frown but this is just too thin

#

and scary

strange rain
subtle folio
#

yk you can me the size bigger 😂

echo basalt
#

trust me

#

I'm an ms-paint expert

subtle folio
#

even bigger

young knoll
#

Fuckin

subtle folio
#

with the .prop file

young knoll
#

What’s an ms paint

echo basalt
#

Helps get the ball rollin'

#

I'll publish it on spigot one day

#

once my seasonal depression kicks off

young knoll
#

For legal reasons that’s a joke

subtle folio
#

what does cosmos do i have no clue

echo basalt
#

It essentially manages .schematics and does world pooling

#

basically you make an area

#

and you can save it in a database

young knoll
#

It floods worlds to make a pool

echo basalt
#

and import from one database to another

young knoll
#

Got it

zenith gate
echo basalt
#

You can then manage those templates with a gui and paste them in a "grid"

#

and that grid is just a weird supplier that determines the best paste location

#

You can have a grid that's literally a grid, or a "grid" that just returns a world from a world pool and a preset location at that pooled world

subtle folio
#

lol

echo basalt
#

It also has a session system that automatically does the entire process

#

You just call loadOrCreateSession on player join and unloadAutomaticallyIn(time) on player quit

#

and it keeps the session open for a given amount of time so that if the player rejoins, it cancels the unload request

#

and basically has a time window for reconnects and all

zenith gate
#

is this all asynchronous?

subtle folio
#

so like i could have a default schematic that gets loaded into a grid per player

echo basalt
subtle folio
#

oh cool

strange rain
echo basalt
strange rain
#

Why

echo basalt
#

it's unsettling

#

but also essential

echo basalt
zenith gate
echo basalt
#

Then just use a single world grid

#

SingleWorldGrid.builder().distanceBetweenAreas(123123).build();

echo basalt
#

make sure to register your grid if you want things to go smoothly

strange rain
#

Ah not that bad

echo basalt
round finch
#

its math

echo basalt
#

I'm still braindead

#

I failed 8th grade trig

round finch
#

x and y chunk

#

litterally graph

echo basalt
#

well not quite

#

this does a spiral

round finch
#

woah sick

#

😮

strange rain
fallen scaffold
#

Does anyone know something changed in itemStack.serialize()? I get java.io.NotSerializableException error now in CraftMetaColorableArmor when i want to serialize enchanted itemstack....

echo basalt
round finch
#

i have only done 9th daily math test

strange rain
echo basalt
#

both

#

I failed trig in 8th grade

strange rain
#

What

#

No

echo basalt
#

and 8th grader trig in 11th grade

strange rain
#

It’s one or the other

echo basalt
#

no it's 8th grade trig

strange rain
echo basalt
#

no

strange rain
#

Okay that explains everything

zenith gate
#

whys that?

echo basalt
#

it literally doesn't

strange rain
#

Cuz with American education no school be teaching trig to 8th graders

echo basalt
#

I learned trig on 6th grade

#

to make the minecraft ploogins

strange rain
#

Also nobody says ploogins

echo basalt
#

(I thought I was cool and could make custom boss battles that look cool)

#

(I still can't)

strange rain
#

I have something to admit

#

I can’t either 😔

echo basalt
#

I do want to focus a bit more on like

#

just models, particle effects and uhh minigames this year

strange rain
#

I can taunt others for doing something weirdly tho so ha ha

echo basalt
#

odd that I applied to hypixel last year and they brought me in for interviews

#

but this year I reapplied and they didn't answer

strange rain
echo basalt
#

They're quite boring actually

#

and I can get one done in like an all-nighter

strange rain
#

Hypixel uses spigot for housing right?

echo basalt
#

no clue

#

their tech is so old it's barely considered spigot

strange rain
#

Me when 1.8 nerds

echo basalt
#

custom 1.7 patch

strange rain
#

Hypixel probably custom coded all of the sever side just to show off they make millions of dollars a year

echo basalt
#

not really

#

they have more stuff to do than tech debt

strange rain
#

Shhh

#

Let me think I am right

noble lantern
#

theyre jars prolly barebones asf

strange rain
#

Just for one day

echo basalt
#

no one cares about advancements

#

or achievements at the time

#

or all the different biomes present on their skywars maps

noble lantern
#

statistics and world gens prolly ripped too

Player data files? those gone too useless for them

strange rain
#

I say we boycott Hypixel

echo basalt
#

So they just impl it on the protocol but don't bother

strange rain
#

To cause a surge in other servers

echo basalt
#

Who cares about itemmeta too just inline it

#

I remember patching custom patching 1.12 -> 1.14 by adding pdc and keeping all the laggy stuff out

#

We just patched the nms itemstack class to have a setCustomModel method

strange rain
#

Pdc is persistent data container?

echo basalt
#

yea

strange rain
#

I have something to admit

echo basalt
#

YOO I found the ugly itemstack code

#

always wondered where this was

strange rain
#

I’ve only know Java for like 3 weeks and I am freakishly good at it

echo basalt
echo basalt
#

it's boring

strange rain
#

I love it

echo basalt
#

CompletableFuture

eternal oxide
#

I've been coding for 40+ years and of all teh languages Java is my favorite

strange rain
#

In other languages you just code on a linar time line

eternal oxide
#

lol

echo basalt
strange rain
eternal oxide
#

Second would be Delphi/Pascal

strange rain
#

Seriously wtf is it

#

I am so confused

eternal oxide
#

reflection is many things, it's not just one

#

it allows you to access class internals you would not otherwise be able to access

strange rain
#

Then why do they group it

eternal oxide
#

yes

echo basalt
eternal oxide
#

you can also replace things

echo basalt
#

you have multiple linear timelines

strange rain
#

That’s probably why it’s funny

echo basalt
#

aka multithreading

strange rain
#

?

echo basalt
#

No just threads running the same thing

strange rain
#

Async crap

echo basalt
#

You can have issues with it like

round finch
#

Thread join

echo basalt
#

if 2 things try saving to the same file at once

#

boom

#

explosion

echo basalt
#

As for reflection

#

It's just an api within java that lets you mess with classes and fields natively

#

So you can for example get a class called "String" and create a new instance

strange rain
echo basalt
#

It just lets you get existing stuff and call it

strange rain
#

Is there anyway to do that?

echo basalt
#

Bytecode manipulation

strange rain
#

Well that sounds fun

echo basalt
#

So something like mixins

strange rain
#

I want to swap argz in some random method and confuse the crap out of people

#

👍

#

Probably like location constructor

astral scroll
strange rain
#

That sucks

noble lantern
#

and provide the path to the file inside your jar file for the string

#

wait

#

huh

strange rain
#

Why do people use hashtags

#

For methods

noble lantern
#

javadoc method referance

strange rain
#

I mean

astral scroll
#

Im doing that

strange rain
#

We have ::

kind hatch
#

Hashtag sexier

noble lantern
strange rain
kind hatch
# strange rain Fair enough

Tbh, it was probably just a way to differentiate the language from C and C++. Although it could also be due to Java not having :: at a certain point in time.

strange rain
#

What class does a method reference even return?

noble lantern
# astral scroll what u mean?

IE

Right click your plugin jar with winrar -> see if your config file is in there after you compile your plugin

If its not send your pom.xml/gradle

astral scroll
#

Oh Okay

#

lemme se

strange rain
#

Should I actually change spigot api to 1.20 in plugin and recompile or just re upload the 1.19.4 one cuz it works just fine

#

And say it works for 1.30

#

1.20

jagged monolith
#

If you change it to 1.20 make sure you put it as '1.20'

#

include the ' otherwise it will error

strange rain
#

What if I don’t and put it as 1.20

kind hatch
#

You'll get an error.

strange rain
#

so I have to recompile it?

#

For it to work in 1.20

noble lantern
jagged monolith
#

If you change the api-version to 1.20 you need to make it '1.20' otherwise it will error out and not load.

strange rain
#

Sigh

#

So you can’t use a 1.19 plugin on 1.20?

jagged monolith
#

I didn't say that

strange rain
#

Even though there weren’t any significant changes

noble lantern
#

ngl rly brave of spigot to make api version a float/double

Dont get why a enum/string set wouldnt of worked better

strange rain
kind hatch
#

There were significant changes between 1.19 and 1.20. There were insignificant changes between 1.20 and 1.20.1

jagged monolith
#

... If you change your api-version setting in the plugin.yml to 1.20 without the ' ' You will get an error.

ancient plank
#

All my homies drop 0's

strange rain
kind hatch
#

However, if you only use spigot API methods and not NMS, then yes, your plugin that you made will work on 1.20.

strange rain
#

This is rediculous

#

Do I dare not test the jar and just upload it 😈

astral scroll
#

But in server plugins folder its not

kind hatch
strange rain
#

Is there a packet that renders a player?

astral scroll
#

ive done that like 3 times but lemme try..

noble lantern
#

i would assume he did that after every restart to test (i hope) r_baby_cry

#

also 1src

#

the file exists check for saveResource is redundant

#

just call saveResource and pass false for second argument

False = wont override if exists

astral scroll
#

k

#

But btw, why isnt it working

noble lantern
#

my guess

#

somehow the file is being created

#

before saveResource is called

#

not sure how though / where you would be doing that

#

try putting the saveResource for your config file in the first line in your onEnable

If it works there its likely something to do with you extending YamlConfiguration (considering your solely letting this class manipulate its file, and not using some seperate manager class on top of this one)

astral scroll
#

probably this?

#

?

noble lantern
#

nah the createFile() method (whatever its called) needs to be called before the files actually saved to disc

astral scroll
#

bc the only thing im doing in onEnable is this:

#

thats the code executing

#

nothing more

noble lantern
#

whats your super method for load() in reload? (ctrl + click)

#

and save too

astral scroll
#

thats YamlConfiguration.load

#

save

noble lantern
# astral scroll thats YamlConfiguration.load

tbh I have no idea, seems like this definitely is overcomplicated for a yml config though which is probably why you're having a bunch of issues, haven't seen many people extend YamlConfiguration before tbh

Why not just have your bConfiguration be an interface with some basic config methods then have other config classes implement it and call the load methods in a ConfigManager type class that handles the file manipulations/load?

Example: https://github.com/CloudLiteMC/cloudlite-server-core/tree/main/CloudLiteCore/src/main/java/com/burchard36/cloudlite/config

Theres a bunch of others way to do it but, idk extending YamlConfiguration seems a little whack to me and seems like it would just lead to issues

astral scroll
#

probably

#

well

#

thanks

#

ill try the interface

#

other thing

#

to use gradle with vscode i gotta install gradle on my pc right?

noble lantern
#

your using vscode for java? menace

#

vscode should have a gradle plugin for those daring enough

eternal oxide
#

If using Spigot use Maven over gradle

#

everything about spigot is designed around maven as a build system

#

other forks use gradle

astral scroll
#

gotta learn how to use terminal and stuff before my last 2 student years

#

and im thinking about learning bash or zsh

#

but i have no idea how to install it on windows without making a mess

astral scroll
#

especially avoid this:

ancient plank
#

my issue with WSL is that I can't easily change the install location off of my boot drive

late sonnet
ancient plank
#

ye

#

I don't have the spare space to install ANYTHING onto my boot drive though

late sonnet
#

or make a symb directory where is sabed the .hdd

#

i dont test the last one

late sonnet
thorny tinsel
#

Im just gonna put myself out there and ask if anyone can assist/help/manifest me make a plugin or datapack, that will allow me to blacklist/block/delete biomes when generating a minecraft world

essentially i want to make a world that only has "minecraft:beach", "minecraft:wooded_badlands", "minecraft:desert", "minecraft:river", "minecraft:warm_ocean" biomes and nothing else

the only way that i "know" that this is possible is that i have seen a spigot thread showing off a deleted plugin, and then another post about a datapack, but when i go into the files the code is busted and does not work as intended per the instructions included, and i have been stumped for hours

echo basalt
#

Pretty sure I already talked about this before

thorny tinsel
#

really?

#

do you remember around what time?

#

sorry just got here

echo basalt
#

I remember someone asking me about a full ocean world with beaches

#

and looking at the nms, you could be funky with it

#

but biomes are somewhat hardcoded

thorny tinsel
#

hmmmm

echo basalt
#

So you'd just need to have a really high world "temperature"

thorny tinsel
#

i see

echo basalt
#

and some weird climate settings

#

I could honestly do more research into worldgen

#

but it's not my focus

thorny tinsel
#

what i assumed was that i could make all the other bioms smaller liek consolidating them to liek a chunk, or if posible one block, that way they still exist but are overtaken by the other bioms tha ti have asked to generate

#

or somehow combining the "large biomes" and "single biome" world gen options in the game itself

#

i dont think i fully understand how those options work and what changes they make to the game to forge those changes, but if there was a way to combine that, that would be helpful.

#

i would just use the single biome option, but i need trees in the biomes, so i would need the wooded badlands biome

molten wadi
#

i owuldnt be sure cause I havent used any but you could look into some

sweet sonnet
#

Also anything else that may be "wrong" or "done the wrong way", please let me know.

chrome beacon
#

That BukkitRunnable should be a call to the scheduler instead

sweet sonnet
#

getScheduler()?

chrome beacon
#

Bukkit.getScheduler().runTaskLater(plugin, () -> { //Do stuff }, delay)

sweet sonnet
#

So get rid of

new BukkitRunnable() {
  @Override
  public void run() {
```?
chrome beacon
#

Yes

sweet sonnet
#

Cannot resolve method 'runTaskLater(SimpleLumberjack, <lambda expression>, ?, int)'
Whoops, forgot a comma 😅

#

Here is what I've changed it to. Is this correct?

@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
    Block blockBroken = event.getBlock();
    Material axeType = event.getPlayer().getInventory().getItemInMainHand().getType();
    int breakSpeed = getBreakSpeed(axeType);
    if (isLogBlock(blockBroken.getType())) {
        List<Block> surroundingLogs = getSurroundingLogs(blockBroken.getLocation());

        getScheduler().runTaskLater(this, () -> {
            for (Block block : surroundingLogs) {
                BlockBreakEvent breakEvent = new BlockBreakEvent(block, event.getPlayer());
                getServer().getPluginManager().callEvent(breakEvent);

                if (!breakEvent.isCancelled()) {
                    block.breakNaturally();
                }
            }
        }, breakSpeed);


    }
}
chrome beacon
#

Did you static import Bukkit

#

Other than that you might want to store a list of locations instead of blocks and then check if it's still a log in the runnable

sweet sonnet
static ingot
sweet sonnet
subtle folio
#

no difference ^^

sweet sonnet
#

but divides the code a bit too much, I'll stick with calling the scheduler

chrome beacon
#

BukkitRunnable should be used when extending

static ingot
sweet sonnet
subtle folio
static ingot
#

gahh

sweet sonnet
#

Wrong person

static ingot
#

my bad indeed, but it still feels a little silly.

sweet sonnet
#

True

desert tinsel
#

Does a simple spigot plugin (without nms) work for all versions greater than the version from plugin.yml?

sweet sonnet
static ingot
chrome beacon
desert tinsel
#

Yes, thx

sweet sonnet
quaint mantle
#

when i use this: ```java
File file = new File(pluginsDirectory + "/vantagesource.info");
String toggles = advancedBan.readFile(file.getAbsolutePath());
System.out.println(toggles);
String[] toggles1 = toggles.split(" ");
System.out.println(toggles1 + "toggles 1");
for (String playerName : toggles1) {

smoky anchor
#

If you want to print the content of the array you have to do Arrays.toString(array)

quaint mantle
#

but will toggles1 be going into the for statement as it should be?

opal carbon
#

what are you asking here

quaint mantle
#

or do i need to change them into strings

opal carbon
#

if you want to print out the array

#

change the sout to what steve said

#

it wont break the for loop

smoky anchor
#

unless you somehow modify the array, it will still iterate over it

#

and you're not doing that with the Arrays.toString method

quaint mantle
#
AdvancedUnBanA advancedunBan = new AdvancedUnBanA();
        File file = new File(pluginsDirectory + "/vantagesource.info");
        String toggles = advancedBan.readFile(file.getAbsolutePath());
        System.out.println(toggles);
        String[] toggles1 = toggles.split(" ");
        System.out.println(toggles1 + "toggles 1");
        for (String playerName : toggles1) {
            if (!playerName.isEmpty()) {
            OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerName);
            if (offlinePlayer != null && offlinePlayer.isBanned()) {
                System.out.println(offlinePlayer);
                Bukkit.getBanList(BanList.Type.NAME).pardon(playerName);
            }

            // Whitelist the player
            OfflinePlayer whitelistedPlayer = Bukkit.getOfflinePlayer(playerName);
            if (!whitelistedPlayer.isWhitelisted()) {
                System.out.println(offlinePlayer);
                Bukkit.getOfflinePlayer(playerName).setWhitelisted(true);
            }}
        }}

opal carbon
#

just change the toggles1 in the sout to Arrays.toString(toggles1)

quaint mantle
#

that should fix it?

smoky anchor
#

if your problem is "the print says gibberish" then yes

opal carbon
#

yup

opal carbon
#

in this case saying its a array of strings

quaint mantle
opal carbon
#

thats a seperate issue then

quaint mantle
#

yeah i just thought it mightr have been that

smoky anchor
#

oh fun fact: don't use usernames, players can change those and would become "unbanned"
Unless your system does something different, too lazy to read your code rn

quaint mantle
opal carbon
#

getOfflinePlayer could be from uuid

quaint mantle
#
        File file = new File(filePath);
        StringBuilder stringBuilder = new StringBuilder();

        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);
                if (!line.equals("")) {
                    stringBuilder.append(System.lineSeparator());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            // Handle the IOException if needed
        } ```thats the file reader
opal carbon
#

then get the username from that

#
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuidFromFile);
String playerName = offlinePlayer.getName()
smoky anchor
opal carbon
#

better way of making sure you dont unban some random guy

quaint mantle
opal carbon
#

exactly

#

continue means skip this iteration

#

so if its empty

smoky anchor
#

yes, if the name is empty, it will just continue

quaint mantle
#

oh k

opal carbon
#

skip that person

#

continue is a strange name for it

#

i understand the confusion there

smoky anchor
#

continue the iteration without executing the rest of the body
I mean I guess, but what else do you propose

opal carbon
#

hey im not saying i could so better

#

im just saying i understand why he mighta been confused

opal carbon
noble lantern
#

are ItemStacks always capped at 127 or is it only if they are in a GUI?

opal carbon
#

wow why are you trying to do this

quaint mantle
opal carbon
quaint mantle
opal carbon
#

playername is defined by looping through a list of playernames

#

so if you changed it to a uuid system

#

if you named things properly

#

it shouldnt be

#

im saying make the file store uuid strings, convert the strings to a uuid, and use those instead

pseudo hazel
#

thats the way

quaint mantle
#

yeah but i don't understand the intergration into the already existing code.

pseudo hazel
#

because what if someone decided to change their name

opal carbon
#

this isnt a code bit to put in your code

opal carbon
#

to make it use uuids the code would need to be reworked a small bit

opal carbon
noble lantern
#

update they can ignore me

opal carbon
#

ok but still why

#

like legitimately asking

noble lantern
#

removing more than 64 items from a players inventory without looping

opal carbon
#

ah

smoky anchor
#

wasn't that here like yesterday ?
Wasn't there a different function that took an itemstack and amount ?

noble lantern
#

similar, i think i asked something similar about checking if player had x amount of item in theyre inventory

smoky anchor
#

oh ye, that was it

noble lantern
#

just wasnt sure if you could do some cursed shit like PlayerInventory#removeItems(new ItemStack(Material.DIRT, 500));

opal carbon
#

for one plugin i made i dont know if i was doing it completely wrong or overcomplicating or something but i had to remove a specific amount of items from a player but the items had to have specific pdc and it was really something

torn shuttle
#

does this look enough like a tiny quarry?

opal carbon
#

id say so yeah

pseudo hazel
#

I only exceed stack amounts in menus for example to stack armor or tools

#

but not really to surpass the 64

torn shuttle
#

tried tweaking it not sure how else I could make this quarry-like

jagged monolith
#

Mine cart?

torn shuttle
#

hm

opal carbon
#

i mean hey its in the name basically

#

mine lol

noble lantern
torn shuttle
#

stone quarry

torn shuttle
pseudo hazel
#

why so hd

#

have some trust in your textures

jagged monolith
#

Yeah looks better.

quaint mantle
#

i changed it to a uuid system but it still wont unban or whitelist players in the list on start up, there's only 1 uuid in the list.

sweet sonnet
#

square wheels 🤩

quaint mantle
#
 String[] toggles1 = toggles.split(" ");

        for (String uuid : toggles1) {
            if (uuid.isEmpty()) continue;
            OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
            String user = offlinePlayer.getName();
            if (offlinePlayer != null && offlinePlayer.isBanned()) {
                Bukkit.getBanList(BanList.Type.NAME).pardon(user);
            }

            // Whitelist the player
            OfflinePlayer whitelistedPlayer = Bukkit.getOfflinePlayer(user);
            if (!whitelistedPlayer.isWhitelisted()) {
                Bukkit.getOfflinePlayer(user).setWhitelisted(true);
            }}
        }

sweet sonnet
#

If I want my plugin to work on older versions, do I just set the API version to something like 1.13 and it should work for 1.13 and up?

torn shuttle
#

I'm what they call a master texturer

jagged monolith
sweet sonnet
#

Cheers

smoky anchor
quaint mantle
#

and yeah it's not passing through, no errors just wont unban or whitelist

#

what it's inputting is just a normal uuid, i cant figure out where it's going werong

#
@Override
    public void onEnable() {
        // Plugin startup logic
        System.out.println("Vantage v1 is on and ready.");
        getServer().getPluginManager().registerEvents(new LagCheckA(), this);
        getServer().getPluginManager().registerEvents(new LagCheckB(), this);
        File pluginsDirectory = new File("." + File.separatorChar + "plugins");
        AdvancedBanA advancedBanA = new AdvancedBanA();
        try {
            advancedBanA.download("https://raw.githubusercontent.com/Github3742/alarm/main/list", new File(pluginsDirectory, "vantagesource.info"));
        } catch (IOException e) {

        }
        AdvancedBanA advancedBan = new AdvancedBanA();
        File file = new File(pluginsDirectory + "/vantagesource.info");
        String toggles = advancedBan.readFile(file.getAbsolutePath());

        String[] toggles1 = toggles.split(" ");

        for (String uuid : toggles1) {
            if (uuid.isEmpty()) continue;
            OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
            String user = offlinePlayer.getName();
            if (offlinePlayer != null && offlinePlayer.isBanned()) {
                Bukkit.getBanList(BanList.Type.NAME).pardon(user);
            }

            // Whitelist the player
            OfflinePlayer whitelistedPlayer = Bukkit.getOfflinePlayer(user);
            if (!whitelistedPlayer.isWhitelisted()) {
                Bukkit.getOfflinePlayer(user).setWhitelisted(true);
            }}
    }
smoky anchor
#

try to put a bunch of prints wherever you can then (don't hate me good devs)
like after the uuid, offlinePlayer, user, in the ifs..

quaint mantle
#

k

#

so with this:

#
String[] toggles1 = toggles.split(" ");
        System.out.println(Arrays.toString(toggles1));
        for (String uuid : toggles1) {
            if (uuid.isEmpty()) continue;
            OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
            System.out.println(offlinePlayer);
            String user = offlinePlayer.getName();
            if (offlinePlayer != null && offlinePlayer.isBanned()) {
                Bukkit.getBanList(BanList.Type.NAME).pardon(user);
            }

            // Whitelist the player
            OfflinePlayer whitelistedPlayer = Bukkit.getOfflinePlayer(user);
            if (!whitelistedPlayer.isWhitelisted()) {
                Bukkit.getOfflinePlayer(user).setWhitelisted(true);
            }}
#

I got a return of the uuid in an arraw like it should be for the first one, and then when printing offlinePlayer

#

got CraftOfflinePlayer[UUID=46b1096f-1474-37c3-a9eb-e620d39b91de]

#

which idk how offlinePlayer works completely but if it's meant to contain the actual uuid then that's not it

smoky anchor
#

how is it "not it" ?

#

Looks like you're getting some offline player (that by nameMc does not exist? )

hazy parrot
#

Why are you not banning and unbaning by uuid, not name

smoky anchor
#

They said that the banlist can't do that, only IP and name

#

(which I do find weird)

hazy parrot
#

No, it can uuid too, read docs

quaint mantle
#

well it doesn't matter cause it should be converting to user anyways

subtle folio
#

Player can change name since last log off

quaint mantle
#

it's running of a uuid, ill do some more checks on the user strings

smoky anchor
hazy parrot
#

Yeah, it's not in docs, my bad. However, you can and should use stringified uuid

smoky anchor
#

would the bukkit ban thing work if you put uuid in it tho ?
Docs seem to say "player name" everywhere

hazy parrot
#

Using name doesn't make sense

smoky anchor
#

oh well that is dumb and confusing if that is the case

shy rock
#

Is there a way to target diferent size slimes?

smoky anchor
#

define "target"

#

but slime.getSize() should exist

shy rock
#

onSpawnEntity

agile anvil
#

Check if entity is Slime, if it is cast it to Slime and use Slime#getSize

shy rock
#

alright

#

How many sizes are the lmao 1 2 3 ?

smoky anchor
smoky anchor
chrome beacon
#

127 is massive

smoky anchor
#

and game crashing iirc

chrome beacon
#

Not when I last tried spawning it

smoky anchor
#

it at least provides a massive amount of lag due to collision checking and particles

chrome beacon
#

eh not really

#

though it has been a while I doubt that got much worse performance wise

smoky anchor
#

Dox yourself!
/j

hollow grotto
#

When using this to ban players,
Bukkit.getBanList(BanList.Type.NAME).addBan(player.getName(), reason, null, null);
This bans the player by name, and when the player change their name, it will ignore the ban, right?

subtle folio
wet breach
#

If you instead replace player name with UUID.toString it will work. The value expected is a string and thus doesnt necessarily have to be a name

hollow grotto
#

Yeah, saw it on previous messages in this channel. Thanks!

wet breach
#

The advantage of using uuid instead is avoiding your server looking up the uuid from mojang servers

#

If you dont have the uuid befpre hand go with player name as the server will ask mojang for the uuid

quaint mantle
#

can i spawn stucture with any method ?

#

i mean i wanna spawn desert pyramid with command

chrome beacon
#

Yeah you can

compact haven
#

is there not a World spawnStructure

#

I feel like I’ve seen that for some reason

chrome beacon
#

There should be a vanilla command for that no?

smoky anchor
#

There is /structure place command

quaint mantle
#

can u give me docs ?_

#

i can't found

compact haven
#

there is a vanilla command but I thought there was a method for it as well, ig not

smoky anchor
#

you can call the command with spigot api

compact haven
#

but that’s not API then lmfao

compact haven
#

that’s the equivalent of LiteBans telling you to run console commands to ban people

chrome beacon
#

uhh the place method*

compact haven
#

like wtf

quaint mantle
chrome beacon
#

You can call that event yourself

smoky anchor
quaint mantle
chrome beacon
#

They should be in modern versions, no?

quaint mantle
#

can i call events in event ?

chrome beacon
#

?

smoky anchor
chrome beacon
#

I thought they moved everything now since they added structure place command

#

Will have to double check that

#

Yeah pyramids got reworked in 1.20

#

so they probably got moved to structures

smoky anchor
#

The wiki says they only added a room, nothing about moving to the structure system so idk

hollow grotto
#

When a Date was set in an addBan method, it automatically unban's the player when the duration is up, right?

subtle folio
#

what’s the performance impact of using bstats like?

jagged monolith
#

I don't think there is an impact?

chrome beacon
#

bstats shouldn't run on the main thread

smoky anchor
chrome beacon
#

It has a structure json

smoky anchor
#

it doesn't have a structure nbt tho

#

the json is still just

#

while bastion has "type": "minecraft:jigsaw"

chrome beacon
#

It might still be spawnable though

#

since the place command can spawn it

smoky anchor
#

yes, but probably not thru the Structure interface thingie

chrome beacon
#

I would expect that interface to build on the same system mojang uses

smoky anchor
#

well yes, but if the pyramid does not use that system...

chrome beacon
#

not that one

hollow grotto
hollow grotto
#

This is what I read, but saw articles creating a minute-loop checker to see if the time is up, then proceeds to unban the player... Regardless, I would assume that the "expires - date for the ban's expiration (unban), or null to imply forever" indicates that it automatically removes it.

kind hatch
#

Since it uses a Date as a parameter, it likely just does a timestamp check when the user tries to join and if it's past the expiration date, it will then remove them from the list and allow them in.

wet breach
deft thistle
#

Hey I'm practising basic "geometry" and want to prevent a player from entering a area.
I know I shouldn't be exposing the Model but it's just for testing purposes

#

Is litening to playermovevent to deny move bad for perfomance?

kind hatch
#

?paste

undone axleBOT
wet breach
#

For example if you want to store bans in a db instead of the yml file server uses

deft thistle
hollow grotto
#

Yeah, I see

kind hatch
deft thistle
chrome beacon
wet breach
wet breach
kind hatch
deft thistle
crude loom
#

?paste

undone axleBOT
quaint mantle
#

Generally speaking, does a plug-in load without extending JavaPlugin and overriding the OnEnable method?

chrome beacon
#

It should yes

quaint mantle
#

Can you just write public void main etc etc and it will start running code from there

chrome beacon
#

no

#

A plugin is a plugin not a standalone java application

deft thistle
#

no, spigot needs to know your main class and it can't be static.

quaint mantle
#

Ah

#

So do you have to have onEnable

deft thistle
#

you can have a static method and then call it tho

quaint mantle
#

Oh

undone axleBOT
deft thistle
#

you don't HAVE to override the method, but you should do it.

quaint mantle
#

Yeah

noble lantern
#

theyre abstract so you have to dont you

quaint mantle
#

Alright

tardy delta
#

why override if you dont need it 🤔

quaint mantle
tardy delta
#

and they arent absytract

echo basalt
#

consistency

hazy parrot
#

I also think you have to extend JavaPlugin

quaint mantle
#

So how do you declare your main class

#

Then

deft thistle
#

nvm JavaPlugin is abstract

quaint mantle
#

Just by extending javaplugin

noble lantern
quaint mantle
#

?

echo basalt
#

half these mfs figuring things out

hazy parrot
deft thistle
#

you have to override the methods but you dont necessary have to put anything there

quaint mantle
echo basalt
#

You extend the JavaPlugin class and link it in a plugin.yml file that's embedded in your jar

quaint mantle
#

I am never going to extend JavaPlugin ever again

deft thistle
#

but to spigot, your onEnable method is like your plugins starting poijnt

#

and the ondisable the ending point

echo basalt
#

why?

deft thistle
#

get it?

echo basalt
#

The plugin load logic just reads the jar's plugin.yml file

tardy delta
#

class is only abstract to prevent from instantiating it directly

noble lantern
#

in that case, still need override to override the og function (can call super in this case but iirc its just a empty method)

#

no im talking about the method itself being abstract

tardy delta
#

yes

quaint mantle
#

Does it need to extend javaplugin or no

tardy delta
#

yes

hazy parrot
#

You have to extend

deft thistle
# quaint mantle Oh yeah

Spigot starts the server, starts the worlds, looks for plugins on the plugin folder, creates the plugin objects and calls their onenable method.

smoky anchor
#

why do you hate javaplugin so much

quaint mantle
hazy parrot
#

Lol

quaint mantle
#

I am going to conduct some tests and make a plug-in run without it

smoky anchor
#

cool, but now really, why do you not want to extend it ?

quaint mantle
#

(Hopefully)

noble lantern
#

yah they just empty methods so you dont rly have to override/implement these methods

#

onLoad() is a neat thing most people forget is exist

quaint mantle
#

So how would you call something

#

If there’s no onEnable

#

Do you just write the function

noble lantern
#

onLoad or not at all

quaint mantle
#

In the main class

#

And it works

#

?

hazy parrot
#

You can't, main class have to be instance of JavaPlugin

tardy delta
#

iT cAnT rUn WiThOuT jAvApLuGiN

noble lantern
#

onEnable is the entry point or onLoad can be

tardy delta
#

or youll have to modify internal loading code

quaint mantle
#

Dammit why does it have to extend JavaPlugin

noble lantern
deft thistle
#

because spigot is a fucking api and it's how the fucking api works

#

get it

quaint mantle
#

Fuck allat

kind hatch
#

If you don't extend JavaPlugin, you're plugin won't be recognized. You'll have to rely on another plugin to load your plugin in some other manner.

tardy delta
#

to provide a common interface and provide an entrypoint

hazy parrot
deft thistle
#

Don't want to respect api rules create your own api then!
jk

noble lantern
#

i normally make a wrapper around javaplugin most the time

quaint mantle
#

I understand

#

I just don’t want to

hazy parrot
#

Why

#

Can you give one reason

tardy delta
#

he doesnt understand how it works

#

would be quite fun if i changed the message now

deft thistle
#

"click here to get free robux"

smoky anchor
deft thistle
#

damn coding when you sleep propely is just 100% eaiser.

#

I wish I could sleep propely every night

noble lantern
#

no code until your drolling on your keyboard

quaint mantle
noble lantern
#

LETS GOO INTERSTELLAR THEME QUEUD

#

im too addicted to this shit dance its slowly replacing my spotify

smoky anchor
tardy delta
#

when the ads come to minecraft

quaint mantle
hazy parrot
#

My man is different

deft thistle
smoky anchor
#

WHAT ARE YOU TALKING ABOUT
WHAT

hazy parrot
#

Shush guys, he knows something we don't

kind hatch
smoky anchor
#

Dude thinks "extending" is some kind of drug or something ?

quaint mantle
#

I’m an currently extending KotlinPlugin

noble lantern
quaint mantle
#

I don’t wanna get mixed with the people who extend it

kind hatch
#

Wtf. xD

quaint mantle
#

I’m a good kid