#help-development

1 messages · Page 11 of 1

noble lantern
#

Yes longer, but more readable and maintanable

shadow zinc
#

?paste

undone axleBOT
desert frigate
#

ah i see why not use else if?

shadow zinc
#

How can I wait on the return of the server status and then return the map?

desert frigate
#

dawg wtf why does it work now

noble lantern
desert frigate
#

true

noble lantern
#

seems you want a CompletableFuture

desert frigate
#

this is prob why i take ages to fix a simple code

shadow zinc
#

no

noble lantern
#

yeah its a lot harder to debug 5 checks on one line

noble lantern
#

You want the future to complete and not block the main thread

shadow zinc
#

no as in not another thing I need to figure out how to use

desert frigate
noble lantern
#

You could do

#

FunctionalInterfaces if you like

#

might be slightly easier

#

it would be really easy uhm

#

i can make some type of markup

shadow zinc
#

alright

#

brb

ashen quest
#

Imagine java had first class functions

#
player.onDie = (event) => {
  
}
noble lantern
#
public void executeSomeFunction(String playerName,
    CallbackFunction theFunction) {
    Bukkit.getPlayer(playerName).sendMessage("lol u fuckin suck");
    theFunction.onComplete();
}

CallbackFunction class

@FunctionalInterface
public interface CallbackFunction {
    void onComplete();
}

This is used similarly to Runnables in a sense, here is how its used ->

executeSomeFunction("Burchard36", () -> {
    Bukkit.broadcastMessage("Im so cool! I waited until executeSomeFunction() completed before runing!");
});
#

Essentially, FunctionInterfaces store a function (In this case onComplete()) and you are able to call said function whenever, whyever, whoever, wherever you want to

shadow zinc
#

mm

compact haven
#

wait what

noble lantern
#

And you can execute it using its method name (In this case onCompelte())

You can have arguments in said method, thats fine

compact haven
#

u can create your own functional interface?

#

I had no clue that was allowed, how interesting

noble lantern
#

so for you, you could calll onComplete() in getFancyUpdateStatus's lambda

#

and onComplete will execute once you have the return value

noble lantern
shadow zinc
#

isn't it just an interface with one implementation?

noble lantern
shadow zinc
#

any special names for two implementations, or is that just an interface?

noble lantern
#

you could use Runnables instead of FunctionalInterfaces if you rly wanted to you get the same effect, runnable stores the method until start() is called

noble lantern
#

If you want its called Completable with a method called complete() you could

#

its really useful

#

While not async like CompletableFuture, its still nice

noble lantern
ashen quest
#

brah i really want em to add firstclass functions cuz almost every lang has that now

shadow zinc
#

can we get a cancel event for onquit?

ashen quest
#

I dont think you can cancel that

shadow zinc
#

it was a joke

ashen quest
#

oh

#

my bad

worldly ingot
shadow zinc
#

lol

ashen quest
#

Nah guys lemme show you my idea

#

Just make an event

#

that forces a player to join

#

how hard is it, cmon you guys are slacking

shadow zinc
#

Alternatively you could hire people to go to everyones house and make them join the server, then use the onquit.cancel

compact haven
#

I mean you can also force them into a player inventory that constantly reopens 😏

#

though they might just alt f4

#

unfortunate

shadow zinc
#

no event listener for computer power off either

ornate patio
#

just to be sure

ashen quest
#

ill add that to my server as smth really unluckky

ornate patio
#

its not possible for PlayerRespawnEvent to be called if the player had not died?

ashen quest
#

true

compact haven
#

it's not a new one by any means, it's been done at least since 1.7, the earliest I seen it

noble lantern
ornate patio
#

its complicated

chrome beacon
#

RespawnEvent might be fired from the end portal

ornate patio
#

wtf

noble lantern
#

oh yah

ornate patio
#

wait seriously

noble lantern
#

pretty sure the portals under the hood just spawn the player in the world

ornate patio
#

thats actually dumb

chrome beacon
#

No

noble lantern
#

well, the entity doesnt exist in the world technically

ornate patio
#

lemme test it out

noble lantern
#

so you cant just teleport directly, entity needs to be spawned first then teleported

chrome beacon
#

For the time the player is viewing the end credits it doesn't exist in the world

noble lantern
#

i assume for that hes just in a dead stasis?

#

not sure that one sounds weird

chrome beacon
#

They're not dead either

#

Neither dead nor in the world

noble lantern
#

⭐ minecraft logic ⭐

#

the iceberg part 1

chrome beacon
#

How would you have done it?

carmine nacelle
#
java.lang.NullPointerException: Cannot invoke "java.lang.CharSequence.length()" because "this.text" is null
        at java.util.regex.Matcher.getTextLength(Matcher.java:1769) ~[?:?]
        at java.util.regex.Matcher.reset(Matcher.java:415) ~[?:?]
        at java.util.regex.Matcher.<init>(Matcher.java:252) ~[?:?]
        at java.util.regex.Pattern.matcher(Pattern.java:1134) ~[?:?]
        at com.squallz.cadiabees.utilities.ColorUtil.color(ColorUtil.java:19) ~[?:?]
        at com.squallz.cadiabees.managers.configmanagers.GUIItemConfigManager.loadGUIItemConfig(GUIItemConfigManager.java:44) ~[?:?]
   ConfigurationSection itemsSection = guiItemConfig.getConfigurationSection("gui-items");
        ConfigurationSection mainGuiSection = itemsSection.getConfigurationSection("main-gui");

        String guiName = mainGuiSection.getString("gui-name");

        for(String itemLine: mainGuiSection.getKeys(false)) {
            Material materialType = Material.getMaterial(mainGuiSection.getString("hive-information-item.type"));
            int itemAmount = mainGuiSection.getInt("hive-information-item.amount");
            String itemName = cadiaBees.colorUtil.color(mainGuiSection.getString("hive-information-item.name"));

line 44 is String itemName = cadiaBees.colorUtil.color(mainGuiSection.getString("hive-information-item.name"));
config

gui-items:
  main-gui:
    gui-name: '#c35bfb⋯#b65ff8「#a963f6C#9c67f3a#8f6af0d#826eedi#7572eba #6776e8H#5a7ae5i#4d7ee2v#4081e0e#3385dd」#2689da⋯'
    items:
      hive-information-item:
        type: book
        amount: 1
        name: '&eHive Information'
noble lantern
#

would likely have player states with a stasis state

#

where players data is flashed into a map and player is despawned

#

then when respawned if that flashed data exists just apply to player

#

ig

#

its the same thing

#

ngl

echo basalt
#

you gotta loop through the items section

#

not through the main-gui section

noble lantern
#

cause hes still not alive or dead that method

carmine nacelle
#

wow

#

been a long day.

chrome beacon
#

I just woke up

#

It's 5am

echo basalt
#

damn

#

I usually go to bed at like 9am

worldly ingot
#

Found the nocturnal

echo basalt
#

between midnight and 6am is exclusively work time

#

there's just nothing better than coding with the AC on and family asleep

shadow zinc
#
    public String applyInternalPlaceholders(String initialMessage, @Nullable Player player) {
        internalPlaceholderReplacements.clear();
        internalPlaceholderReplacements.put("%TPS%", getFancyTps());
        internalPlaceholderReplacements.put("%TPSHALT%", getFancyHaltTps());
        internalPlaceholderReplacements.put("%SERVERHALTED%", fancyIsServerHalted()); //Player null because we don't care about bypass
        internalPlaceholderReplacements.put("%PLAYERCOUNT%", String.valueOf(Bukkit.getOnlinePlayers().size()));
        internalPlaceholderReplacements.put("%PLAYER%", player == null ? "None" : player.getName());
        getFancyUpdateStatus(result -> {
            internalPlaceholderReplacements.put("%UPDATESTATUS%", result);
        });
        return UtilManager.replaceFromMap(initialMessage, internalPlaceholderReplacements);
    }```
#

cant return inside of it

echo basalt
#

you should just make a placeholder system honestly

compact haven
#

the hell

#

why u have a map outside of that method for placeholders, that you clear

shadow zinc
#

its not my code

compact haven
#

declare that map inside the meth- oh

shadow zinc
#

not my code

echo basalt
#

I just use my crappy placeholder system

shadow zinc
#

cool

#

good stuff

echo basalt
#

expensiveLookup replaces and re-loops

#

so that if a placeholder returns another placeholder, both get parsed

shadow zinc
#

cool

compact haven
#

or just, yk, use minimessage 😏

worldly ingot
#

Or, you know. String#replace(), which is chainable

echo basalt
#

:)

compact haven
#

nahh

echo basalt
#

I do use string.replace but what if you use a supplier

#

what if the value isn't a constant but varies

#

you'd have to reparse the entire map

shadow zinc
#

thats deep

echo basalt
#

🤡

shadow zinc
shadow zinc
#

5, weak

echo basalt
#

I love how the only recommendation I got from that video was 8 mile rap battles

shadow zinc
#

lol

echo basalt
#

no joke

shadow zinc
#

good to know its all the same

compact haven
#

man says "go" at the beginning xd

worldly ingot
#

It's a vine. Do you expect it not to be scripted? ;p

compact haven
#

lmao

drowsy helm
worldly ingot
#

What do you mean "how it's actually coded"?

#

It's implemented by CraftBlock

compact haven
#

^ I mean you just linked the code

#

I guess you mean implemented?

chrome beacon
#

Also you can remove drops with the api already

worldly ingot
#

Right. BlockDropItemEvent

drowsy helm
#

oh sweet

#

afaik it doesnt call that

river oracle
#

all of the api usually has Craft equivalents as well

drowsy helm
#

let me double check

worldly ingot
#

A Block is less a persistent block reference in the world more than it is just a data wrapper that calls upon methods from the World at a specific block position

river oracle
#

if you need to check implementation use CraftBukkit versus Bukkit

shadow zinc
#

Choco, can you give me any pointers for my problem i was having earlier?

worldly ingot
#

I dunno what your problem was

shadow zinc
#

So for this code

#
    public String applyInternalPlaceholders(String initialMessage, @Nullable Player player) {
        internalPlaceholderReplacements.clear();
        internalPlaceholderReplacements.put("%TPS%", getFancyTps());
        internalPlaceholderReplacements.put("%TPSHALT%", getFancyHaltTps());
        internalPlaceholderReplacements.put("%SERVERHALTED%", fancyIsServerHalted()); //Player null because we don't care about bypass
        internalPlaceholderReplacements.put("%PLAYERCOUNT%", String.valueOf(Bukkit.getOnlinePlayers().size()));
        internalPlaceholderReplacements.put("%PLAYER%", player == null ? "None" : player.getName());
        getFancyUpdateStatus(result -> {
            internalPlaceholderReplacements.put("%UPDATESTATUS%", result);
        });
        return UtilManager.replaceFromMap(initialMessage, internalPlaceholderReplacements);
    }```
#

at getfancyupdatestatus

#

it decides if the server needs an update

carmine nacelle
#
        ConfigurationSection mainGuiSection = guiItemConfig.getConfigurationSection("gui-items.main-gui");
        ConfigurationSection itemsSection = mainGuiSection.getConfigurationSection("items");

        String guiName = mainGuiSection.getString("gui-name");

        Bukkit.getLogger().info("Beginning loading");

        for(String itemLine: itemsSection.getKeys(false)) {
            Material materialType = Material.getMaterial(mainGuiSection.getString(itemsSection + itemLine + ".type"));

is this right??

#

this is a pita

carmine nacelle
#

i could just do it the long way but ppl recommended using variables lmao

compact haven
#

for good reason..

carmine nacelle
#

I mean I cant figure it out soo

worldly ingot
shadow zinc
#

how much of a learning curve is CompletableFutures?

worldly ingot
#

Really not that bad once you wrap your head around them

ashen quest
#

hello the creativest of the spigot land

gimme plugin idea 🔫

carmine nacelle
#

id assume this mainGuiSection.getString(itemsSection + itemLine + ".type" would get me

gui-items:
  main-gui:
    gui-name: '#c35bfb⋯#b65ff8「#a963f6C#9c67f3a#8f6af0d#826eedi#7572eba #6776e8H#5a7ae5i#4d7ee2v#4081e0e#3385dd」#2689da⋯'
    items:
      hive-information-item:
        type: book
``` my type
hardy swan
#

It can be really steep

#

Depending on how much you care

shadow zinc
ashen quest
#

eyo what

drowsy helm
#

yeah BlockDropItemEvent doesnt even get called with breakNaturally

shadow zinc
#

sorry bro, you had a gun at me

ashen quest
#

xd

worldly ingot
#

It doesn't, but it does for Player#breakBlock(Block)

drowsy helm
#

oh easy

compact haven
#

you dont add configuration sections like that

carmine nacelle
#

someone earlier gave me an example that did 😐

compact haven
#

you just do itemsSection.getString(itemLine + ".type");

#

well they're stupid

hardy swan
#

?

fleet comet
#

Does anybody know how the minecraft auth works? im tryna figure it out so i can make a login system for my plugin, that actually uses what the minecraft launcher uses ig

river oracle
#

minecraft auth already handles it you don't need to touch auth

compact haven
#

u need microsoft oauth

worldly ingot
#

Ehm, yeah, that just kinda sounds like a bad idea. But if you want information on it, this is documented on wiki.vg

chrome beacon
#

Let me guess to bypass chat reporting with offline mode

river oracle
#

thats not the way to do it lol

worldly ingot
river oracle
#

when are they going to update finally iits been too long

chrome beacon
#

To 1.19.1 you mean?

river oracle
#

yea

chrome beacon
#

They delayed it because of community feedback

river oracle
#

i know lol

hardy swan
#

If minecraft stopped updating will the community be more satisfied

river oracle
#

you don't think I was not mad about that, but for how little they cared about the feedback I'm surprised they even bothered taking a month

ashen quest
#

i hate microsoft for whaat they are doin with mc

fleet comet
fleet comet
worldly ingot
#

mfw "how little they cared about feedback" but they literally took a whole month to fix issues from community feedback

hardy swan
#

They care about feedback ok

ashen quest
#

eyo finally saw choco agressive xd

chrome beacon
worldly ingot
#

That's not aggressive wat KEKW

chrome beacon
#

^

ashen quest
#

;( then its time, make a disstrack

#

on optic i guess

#

or on me

hardy swan
#

They even made the effort to say that they aint going to fix certain shit in bedrock

fleet comet
chrome beacon
#

No need to auth the players yourself

ashen quest
#

:harold: emoji moment

chrome beacon
#

Any proxy or server can do that for you

river oracle
fleet comet
#

or i can just make life harder and auth myself

compact haven
#

uhm no

worldly ingot
compact haven
#

^ they fixed an exploit that allows you to have the client sign something they didn't want to say

river oracle
worldly ingot
#

This is why it was a snapshot/pre-release

chrome beacon
worldly ingot
#

That's what they're for

compact haven
#

someone already linked

fleet comet
#

already sent (:

buoyant viper
#

u think i read?

ashen quest
#

already linked

worldly ingot
#

The only time you need that authentication scheme by the way is if you're making a custom launcher

#

Pretty much no other scenario

carmine nacelle
#

@compact haven got the previous part working now im stuck on...

            List<String> mainItemLore = itemsSection.getStringList(itemLine + ".main-lore");

not getting

gui-items:
  main-gui:
    gui-name: '#c35bfb⋯#b65ff8「#a963f6C#9c67f3a#8f6af0d#826eedi#7572eba #6776e8H#5a7ae5i#4d7ee2v#4081e0e#3385dd」#2689da⋯'
    items:
      hive-information-item:
        type: book
        amount: 1
        name: '&eHive Information'
        main-lore:
         - ''
         - '&eThis hive currently has &7{BEE-AMOUNT} &ebees'

my lores

#

returning a blank list

river oracle
#

Speaking of which now that I know the authentication is on wiki.vg I should get to making my custom client at some point

buoyant viper
chrome beacon
ashen quest
#

you know shit is bout to get real when it goes "Several people are typing"

worldly ingot
river oracle
buoyant viper
carmine nacelle
#

rip

worldly ingot
#

No apples?

fleet comet
#

cause i cannot find much of any

river oracle
#

its in C# but thats basically just java with shittier conventions

fleet comet
#

i really want to use GUI kinda like lunar, but i also wanna use java. i can change my mind abt that tho

worldly ingot
fleet comet
#

i found it

worldly ingot
#

There are literally examples in most popular languages

fleet comet
#

i found that lol

river oracle
#

no its probably just objectively better for gui's tbh

fleet comet
#

C# is mean though

#

whats lunar's gui in?

river oracle
#

idk is lunar open source

carmine nacelle
#

Anyone got an idea for my issue...? it should be returning a stringlist but its not

#

syntax is valid

worldly ingot
#

Does Lunar have a launcher? I thought it was a client

fleet comet
#

it has a launcher 2

#

its both

compact haven
#

make the launcher in electron

last ledge
#

system.out.print('Happy Birthday'){ cin>>n

river oracle
#

Lunar's launcher isn't open source so who knows

worldly ingot
#

They do have a legacy launcher forked, which is Java/Kotlin

river oracle
#

hmmm ^ yep just saw xD

fleet comet
fleet comet
compact haven
#

you're the only insecure one

fleet comet
#

hmmm

worldly ingot
#

But yeah, if you're going to write in Java, I'd advise JFX. If you want to do C# like Y2K suggested, WPF is great

fleet comet
#

no

compact haven
#

u just don't know good tech when u see it

fleet comet
chrome beacon
#

Swing uwu

raw sky
#

Can I have a java project with some kotlin files mixed into it and still have it work fine?

compact haven
#

but all jokes aside, I'm joking of course

fleet comet
worldly ingot
compact haven
#

you only use electron if you really need it to be 2 platforms with a single codebase

river oracle
worldly ingot
#

You should be fine but generally you want to stick to one language in a project

raw sky
worldly ingot
#

If you're going to have at least one Kotlin class, just write in kotlin

river oracle
#

^ as choco said i'd advise sticking too one language

#

I would totally learn kotlin but I would never learn kotlin just for spigot lol thats the only thing I've used java for

chrome beacon
#

Yeah just don't use Kotlin :)

worldly ingot
#

I mean yeah

#

+1 on that at least

#

But to each their own

river oracle
#

if you want to do android development and are interested in picking up kotlin go ahead and then you can write your spigot projects in it too other than that imo its not really worth the time or effort especially if your already profficent in java

raw sky
chrome beacon
#

I do android in Java

#

Not a big fan of Kotlin

river oracle
#

I've heard kotlin is better for android development 🤷‍♂️ so thats where if I were to use it android dev is where I would

#

but its pretty much preference kotlin doesn't do much other than incorperating some null stuff afaik

carmine nacelle
#

ok i need opinions...

#
 main-lore:
          - ''
          - '&eThis hive currently has &7{BEE-AMOUNT} &ebees'
          - '&eThis hive is currently level: &e{HIVE-LEVEL}'
        upgrade-lore: #the below is information relating to what is displayed when a hive has upgrades available.
          - ''
          - '&eLevel: &7{NEXT-HIVE-LEVEL} &e - &a${NEXT-HIVE-COST}' #The variables will automatically increment and be assigned
          - '&e- &7{NEXT-MAX-BEES} &eBee Slots' #{NEXT-MAX-BEES} is the INCREASE IN amount of bees you can have with the new hive level
          - '&e- &7{NEXT-MAX-HONEY} &eHoney Storage' #{NEXT-MAX-HONEY} is the INCREASE IN amount of honey you can have with the new hive level
          - '&e- &7{NEXT-REWARD-CHANCE} &eChance for a bee to return with a reward' #{NEXT-REWARD-CHANCE} is the INCREASE IN the chance for a bee to return with an item, defined in hive-rewards.yml

So, on my item I need to ALWAUYS include the main-lore, but the upgrade-lore will be duplicated and modified in place of the placeholders X amount of times

#

I separated them so it would make this easier, but its causing me issues. Id like to combine it just into "lore"

fleet comet
#

whattttt

#

i just found this

#

write in java, upload in kotlin 🙂

river oracle
#

What would be the point of that

fleet comet
#

there isnt

chrome beacon
#

Well Intellij has the same creators as Kotlin so expect decent integration

river oracle
#

Kotlin has no language support on vscode lol

#

They want me to use there product hell no

chrome beacon
#

VSC is a fancy text editor not an IDE

#

^ my opinion

river oracle
#

Eh works for me has everything I need:P

chrome beacon
#

VSC is great for web dev

river oracle
#

I don't like intellij I spent like 4 hours configuring it to not be awful and still didn't like it

chrome beacon
#

I just run defaults

#

With some plugins

river oracle
#

The defaults are horrible imo but I'm coming from eclipse

chrome beacon
#

Started with Eclipse too

fleet comet
#

same

#

but i moved cause eclipse kinda clunky to me

river oracle
#

I actually don't mind eclipse though the ui just feels old needs some work tbh

ashen quest
worldly ingot
#

Be the change you want to see

ashen quest
river oracle
#

Oh is there rust

ashen quest
#

BRAH THEY CARE ABOUT KOTLIN, ily whoever made these docs

river oracle
#

Damn they have rust I thought I found a job for imajin

fleet comet
noble lantern
#

rust the game

#

?

#

nope

#

bye

river oracle
fleet comet
fleet comet
river oracle
quaint mantle
#

Its gonna take atleast a month before ivm is portable

river oracle
#

Maybe at some point I could contribute but right now I'm too fucking stupid

ashen quest
noble lantern
#

Involuntary Vehicular Manslaughter

#

IVM

#

^

carmine nacelle
#

my first guess was intoxicated

quaint mantle
#

Intoxicated whilst Vaccinating against Malaria

noble lantern
#

mmmm

#

hot

#

why not covid tho

#

isnt malaria a think of the past

quaint mantle
#

No

river oracle
#

Malaria is still a problem in 3rd world countries imsjin doesn't wanna leave them behind

quaint mantle
#

According to the latest World malaria report, there were 241 million cases of malaria in 2020

noble lantern
#

ohhh

#

WTF

#

fuck

#

okay yeah definatly get a malaria vac

#

while intoxicated

river oracle
#

I forget where malaria is commin

noble lantern
#

africa

river oracle
#

I'd have to look

noble lantern
#

its a worm

#

iirc

#

little crawly buddy

quaint mantle
#

Its a diseas

#

Transmitted by mosquitos

noble lantern
#

oh yah

#

blood disease ouch

ashen quest
fleet comet
#

C# is confusing as hell

noble lantern
#

LOL

#

mans laugh xD

river oracle
#

Asia, Africa, South America in tropical area

noble lantern
#

ahahaa

ashen quest
#

yea thats what i m sayin, mans laughter

ashen quest
noble lantern
#

nono

ashen quest
#

manslaughter

noble lantern
#

slaughter

river oracle
#

Not hard

ashen quest
fleet comet
#

okay maybe not the code

quaint mantle
ashen quest
fleet comet
#

visual studio is confusing as hell

river oracle
#

Eeww

ashen quest
quaint mantle
ashen quest
#

me and my homies use rider

noble lantern
river oracle
#

Visual Studio

noble lantern
#

im actually confused now LOL

ashen quest
#

even tho i m not native english

noble lantern
#

oh okay xD Legit couldnt tell ngl

ashen quest
#

is it bad that my first lang is hindi and i hate it

  • my english is better than my hindi
fleet comet
noble lantern
#

i mean i hate english

#

so understandable

quaint mantle
#

Guys shutup

#

Just captured a city in spore

ashen quest
#

nah english is good af when u start learnin hindi

quaint mantle
noble lantern
#

tf is spore

quaint mantle
#

Wow

ashen quest
#

@noble lantern omw to make a love story movie named "Main class and you"

noble lantern
#

i tried making it sound like those infomercials

#

like "Your colon and you"

ashen quest
#

xd it does

#

holy sheesh your api is actually good, imma use it in future stuff

fleet comet
ashen quest
#

VS Moments

fleet comet
#

I HAVE NO IDEA what ANY of that MEANS

ashen quest
#

isnt that what programming is

noble lantern
#

still has a lot of work to do

last ledge
#

system.out.print("My first program");
Generated an exception at line 4
Syntax error

#

Please help

noble lantern
#

sigh

compact haven
#

@quaint mantle how useful is ivm actually

noble lantern
#

frolic werent you doing this in here a few weeks back

quaint mantle
#

can yall stop asking about ivm

ashen quest
quaint mantle
#

that shits stressful

noble lantern
#

whats ivm

compact haven
#

no

ashen quest
fleet comet
compact haven
#

it's his own virtual machine (like what the jvm is)

noble lantern
quaint mantle
#

Not yet

#

Well it is

last ledge
ashen quest
noble lantern
#

inventory API is rly nice however i need to add handling for the drag click event

fleet comet
#

this is ivm

#

jk jk

ashen quest
carmine nacelle
#

WTFFFFF

#

oh

#

i read that as ||masturbating|| with harvested immature egg cells...

last ledge
ashen quest
fleet comet
#

you guys...

#

just no

ashen quest
#

jade u can say u thougth that as well

#

we dont judge here

#

😌

ornate patio
#

ok so it turns out PlayerRespawnEvent is called when a player jumps in an end portal in the end and quits the end credits

#

is there a way to tell if the player is respawning from being dead or not

#

without caching dead players because im too lazy to do that

fleet comet
ashen quest
#

ahh

fleet comet
#

webpage

ornate patio
#

i can check if the player's health is 0 or not

carmine nacelle
#

Cant it go under 0 depending on how hard the killing hit is..

hardy swan
#

No

#

I mean, doesnt matter

ornate patio
#

i'll just check if its <= 0 then anyways

#

but i dont think the health can be negative

hardy swan
#

It depends on when you check

#

Because half the time you are checking before the damage is applied

#

If you are checking after, then what is the point of checking

buoyant viper
#

@last ledge why arent the icons in the same positions :(

#

boxes are aligned just fine but not the icons

last ledge
#

leme fix it rq

ornate patio
#

why is setPlayerListName inconsistent

#

on one player's side it is updating correctly

#

but on the other it doesnt change

#

on one players side it looks like this

#

but on the other its this

#

it looks like when I use player#setPlayerListName, it's updating for everyone in the server except for the player whose tab list name is being changed

#

nevermind turns out i was calling it in a player respawn event, where the player is still technically dead

bold vessel
#

i think its my map but idk why the server crash

#

i create the map myself on worldpainter

bright jasper
#

Is there a way to change an Items NBT without it doing that cycle animation in the hotbar

wary wren
#

Hey, I got a problem with skull items not stacking when added with PlayerInventory#addItem. Manually stacking works.

#

They got the same gameprofile set.

carmine nacelle
#

Is there an easy way to replace part of a string with something else if the part ur replacing has color...?

#

I know I could stripcolor but I need to keep the color.

buoyant viper
#

String.replace?

carmine nacelle
#

dont think it picks up on colored stuff

wary wren
#

Just replace the part without the color

carmine nacelle
#

?

wary wren
#

You want to replace a part of a string without removing the color code right?

#

Then just don't remove the color code part?

carmine nacelle
#

the placeholders need to be replaced

#

they are colored so replace doesnt work on them

wary wren
#

replace("{NEXT-MAX-BEES}", "lol") doesnt work?

noble lantern
#

it should

#

but only the first occurance

wary wren
#

thats want you want right?

noble lantern
#

unles im mixing it up with js

wary wren
#

replaceAll

#

yes you're right

noble lantern
#

sometimes they might have butch but yah

#

typically colors dont matter

#

unless the configurator

#

does some cursed shit like

bright jasper
#

https://i.kawaii.sh/F-PbYGn.mp4

items:
  special_sword:
    id: Funky
    name: Special Sword
    description: The sword does stuff
    material: DIAMOND_SWORD
    components:
      -
        name: test
        values:
          data: 5
public class TestComponent {
    public Integer data;
}

public class TestSystem extends ItemSystem<TestComponent> {
    public TestSystem() {
        super("test");
    }

    @Override
    public void onCreate(ItemCreateEvent<TestComponent> event) {
        event.getComponent().data++;
    }

    @Override
    public void onInteract(ItemInteractEvent<TestComponent> event) {
        var player = event.getBukkitEvent().getPlayer();

        if (event.getComponent().data < 1) {
            player.getInventory().remove(player.getInventory().getItemInMainHand());
            player.sendMessage(Component.text("OH NO. Your ")
                    .append(event.getItemStack().displayName())
                    .append(Component.text(" broke :("))
                    .color(NamedTextColor.GRAY));
            return;
        }

        player.sendMessage(event.getItemStack().displayName()
                .append(Component.text(String.format(" has %s usages left!", --event.getComponent().data))
                .color(NamedTextColor.GRAY)));
    }
}

#

ecs api

#

rate the concept

#

i finished it

noble lantern
#

{NEXT&6-MAX&8-BEES}

carmine nacelle
#

the hell is a dangling metacharacter..

#

extraLoreLine.replaceAll("{NEXT-HIVE-LEVEL}", "lol");

noble lantern
wary wren
#

you need todo \{\}

noble lantern
#

^

wary wren
#

you need to escape them in java

#

when using in strings

carmine nacelle
#

illegal escape character

noble lantern
#

were not seeing the entire config section there

bright jasper
#

thats the entire config

#

:)

wary wren
#

ah you don't need them to escape

#

mb

bright jasper
#

you do /iecs give special_sword to get the default item

noble lantern
#

im talking about

#

like what effects it does and actions

bright jasper
#

wym effects and actions

noble lantern
#

r it just looks like a config to pdc storage container

bright jasper
#

ah right. When you mutate the component class it auto updates its data in NBT (not PDC)

noble lantern
#

im not talking about that

#

im talking about actual actions

#

eg right click

#

rn its just storing a variable in config

#

like how do i add actions via config like you have in the video

#

or is it only just variable storage rn

carmine nacelle
#

yeah even with Replaceall its still not replacing 🤔

wary wren
carmine nacelle
#

I might just be stupid?

            if(guiItem.hasExraLore()) {
                ItemMeta currentGUIItemMeta = guiItem.getGuiItemStack().getItemMeta();
                List<String> extraLore = guiItem.getGuiItemLoreExtra();

                for(HiveLevel hiveLevels: cadiaBees.hiveLevelManager.getHiveLevels()) {
                    if(!hiveLevels.getHiveLevel().equals(hiveLevel) && hiveLevels.getHiveLevel() > hiveLevel) {

                        for(String extraLoreLine : extraLore) {
                            extraLoreLine.replaceAll("{NEXT-HIVE-LEVEL}", "lol");
                        }
                    }
                }

                currentGUIItemMeta.setLore(extraLore);
                guiItem.getGuiItemStack().setItemMeta(currentGUIItemMeta);
            }
noble lantern
#

API is nice though

#

A1

bright jasper
wary wren
bright jasper
#

the config file

#

      -
        name: test
        values:
          data: 5

if you remove this, which is a component

noble lantern
bright jasper
#

that ysstem d oesn't run anymore

#

atm hard code, later on there will be some sort of yml scripting

noble lantern
#

ahh okay

bright jasper
#

its mostly for server owners who are doing stuff mostly custom anyway

noble lantern
#

yeah thats the part i was mainly asking about

bright jasper
#

and yeah its not really pdc, its direct nbt

#

serializes the component class to json and back and stuff like that

#

the stuff provided in values are the default parameters

#

onCreate event can modify all the stuff it wants 🤷‍♂️

noble lantern
bright jasper
#

yep

#

and you can have multiple components

#

they are scoped

noble lantern
#

ide be concerned for the meta data size of those items xD

Personal preferance i would much prefer a CLass<?> referance with its primitive value

Then initialize it with said primitive of said class

drowsy helm
#

that method is just inefficient lol

wary wren
#

Yea but the problem is still there. If you already have a stack and add a item, doesn't stack.

#

The only solution I come up is to write my own addItem method.

bright jasper
noble lantern
#

yes it will

drowsy helm
#

is getShard some static variable

noble lantern
#

Class.forName(String)

#

store CLass.getName()

#

its the package + class name

wary wren
bright jasper
#

ah. I mean nbt already stores everything in json though?

noble lantern
#

ofc its not an actual Class<?> its just a string referance to it

wary wren
#
    public static ItemStack getSkull(String base64EncodedString, String name, List<String> lore) {
        final ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (byte) 3);
        SkullMeta meta = (SkullMeta) skull.getItemMeta();
        assert meta != null;
        GameProfile profile = new GameProfile(UUID.fromString("a6afa028-6087-472f-abc8-d89e96aed792"), null);
        profile.getProperties().put("textures", new Property("textures", base64EncodedString));
        Method setProfileMethod = null;
        try {
            setProfileMethod = meta.getClass().getDeclaredMethod("setProfile", GameProfile.class);
        } catch (NoSuchMethodException | SecurityException ignored) {}
        try {
            // if available, we use setProfile(GameProfile) so that it sets both the profile field and the
            // serialized profile field for us. If the serialized profile field isn't set
            // ItemStack#isSimilar() and ItemStack#equals() throw an error.
            if (setProfileMethod == null) {
                Field profileField = meta.getClass().getDeclaredField("profile");
                profileField.setAccessible(true);
                profileField.set(meta, profile);
            } else {
                setProfileMethod.setAccessible(true);
                setProfileMethod.invoke(meta, profile);
            }
        } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException | SecurityException |
                 InvocationTargetException e1) {
            e1.printStackTrace();
        }
        meta.setDisplayName(Utils.color(name));
        meta.setLore(lore.stream().map(Utils::color).collect(Collectors.toList()));
        skull.setItemMeta(meta);
        return skull;

    }
noble lantern
wary wren
#

Thats basically im callign to create the item in the data class

noble lantern
#

stuff like ints and stuff its bitchin

bright jasper
drowsy helm
#

dont see why its not stacking

noble lantern
#

but like if someones stupid and inserts a huuuuuge pojo class and doesnt transient certain fields debugging said item may be aids

wary wren
quaint mantle
#

does anyone here know minimessage? i was wondering how to make a text with it since the docs are outdated

wary wren
#

MiniMessage.build().parse()

quaint mantle
wary wren
#

nah

#

basically you create a static constant named like MiniMessage in your main or somewhere else and build it directly.

example:
    MiniMessage MINI_MESSAGE = MiniMessage
            .builder()
            .tags(TagResolver.builder()
                    .resolvers(
                            StandardTags.defaults()
                    )
                    .build())
            .build();
#

with that yo ucan MINI_MESSAGE.deserialize("<red>My text is red</red>")

#

The docs are for 1.19

#

if you use 1.16, need to use version history

#

but its basically same with the exception to use parse instead

quaint mantle
#

okay so i make a public static as Minimessage and then generate a getter and import that into another file to use it?

#
message = MiniMessage
                .builder()
                .tags(TagResolver.builder()
                        .resolvers(
                                StandardTags.defaults()
                        )
                        .build())
                .build();```
wary wren
#

yes

#

it depends a bit

quaint mantle
#

wait so how would i send the message?

#
sender.sendMessage(EmbarkkCore.getMessage().deserialize("<rainbow>testing</rainbow>"));```
wary wren
#

yes

#

thats right

quaint mantle
#

.toString breaks it

#

theres an error

wary wren
#

you don't toString

#

you need paper

#

btw

#

xD

#

do you have the paper-api included?

quaint mantle
#

damn

#

i can

#

can i use it with spigot?

wary wren
#

its possible yes

quaint mantle
#

because i would have to recode half of my plugin

wary wren
#

if yo uwant to have spigot support

#

So you would just write your own sendMessage method

#

as example:

public static void sendMessage(Player player, Component component) {
player.sendMessage(LegacyComponentSerializer.legacyAmpersand().serialize(component));
}
#

You could also be fancy

#

as example:

public static void sendMessage(Player player, Component component) {
  if(check if its paper because every one uses paper) {
    player.sendMessage(component)
  }else {
  player.sendMessage(LegacyComponentSerializer.legacyAmpersand().seriazize(component));
  }
}
#

you need more information

#

Do you use 1.16?

#

a wait that doesn't matter if you include adventure yourself

#

mb

quaint mantle
#

this showed

wary wren
#

did you shade kyori inside?

quaint mantle
#

i did not...

ashen quest
#

nice

wary wren
#

thats your problem

quaint mantle
#

where would i find this?

#

wait you mean the dependency?

wary wren
#

yes

quaint mantle
#

yes i did add it

#

along with sonatype

carmine nacelle
#

oops

wary wren
#

yea but I think you added only for compileOnly

#

you can see it if you open your jar as zip archive

#

and check if you have net.kyori

quaint mantle
#

i do have it

#
public static MiniMessage message;

// on enable:
            message = MiniMessage
                .builder()
                .tags(TagResolver.builder()
                        .resolvers(
                                StandardTags.defaults()
                        )
                        .build())
                .build();

// getter
    public static MiniMessage getMessage() {
        return message;
    }```
wary wren
#

mhm

#

which version you added?

quaint mantle
#

4.11.0

#
        <dependency>
            <groupId>net.kyori</groupId>
            <artifactId>adventure-text-minimessage</artifactId>
            <version>4.11.0</version>
        </dependency>```
wary wren
#

I found something

#

here is aguide to add it to bukkit

#

because you only included the api

#

but the internal stuff don't exist because its spigot, so you need to add that

#

what i sent here

quaint mantle
#

let me try it now

#

one sec

wary wren
#

I don't know what im doing wrong with addItem.

#

Spigot uses ItemStack#isSimiliar for comparing

quaint mantle
#

nope

wary wren
quaint mantle
wary wren
#

Could you try to use the same version also for platform?

quaint mantle
#

what if i remove the spigot dependency and replace it with paper?

#

would that break anything? It probably would

wary wren
#

which version you use?

#

if you don't use anything from paper

#

nop doesn't break anything

buoyant viper
#

it will mark a lot of methods as Deprecated tho

#

specifically anything involving text

wary wren
quaint mantle
#

for the mc version

wary wren
#

I think you need to use a older version insead of 4.11

#

let me check

quaint mantle
#

what version

#

okay

wary wren
#

try out implementation "net.kyori:adventure-text-minimessage:4.2.0-SNAPSHOT"

quaint mantle
#

one moment

#

okay so its a different error

west scarab
#

Is there a way to make a certain part of a message have a click event, then the other part not?

vocal cloud
#

Yes

kindred valley
#

what is the checksum of credit cards? I'm asking for a project

vocal cloud
#

As long as it's not a plugin lmfao

quaint mantle
wary wren
#

yea im searching

#

xD

quaint mantle
#

okay xD

vocal cloud
wary wren
#

okay wait we try something else

quaint mantle
wary wren
#

down are the versions

quaint mantle
#

wait

#

i didn't add this to my pom

#

implementation "net.kyori:adventure-platform-bukkit:4.1.1"

wary wren
#

a for maven its

 <dependency>
    <groupId>net.kyori</groupId>
    <artifactId>adventure-text-minimessage</artifactId>
    <version>4.11.0</version>
 </dependency>
 <dependency>
    <groupId>net.kyori</groupId>
    <artifactId>adventure-platform-bukkit</artifactId>
    <version>4.1.1</version>
 </dependency>
#

that was for gradle

#

mb

quaint mantle
#

let me try it now

wary wren
#

XD

quaint mantle
#

should i cast it?

#

i get this error

wary wren
#

mhm

#

okay

#
this.adventure.sender(Bukkit.getConsoleSender()).sendMessage(Component.text("Hey"));
#

does that work?

#

@quaint mantle

quaint mantle
#

let me check

#

i gotta cast it to a ComponentLike everytime does that matter?

wary wren
#

why do you have to cast it?

quaint mantle
#

idk

noble lantern
quaint mantle
noble lantern
#

Well yes, but theres likely a way that isnt as costly

wary wren
#

Because we calculating the difference between two vectors

#

for that we need a matrix

#

thats the reason

noble lantern
#

Couldnt you just just subtract the z and z from each others locations?

wary wren
#

that would be possible

wary wren
quaint mantle
#

ye

#

i give up on minimessage bro

#

lol

wary wren
#

no

#

wait

#

show me your code

#

xD

quaint mantle
#
this.adventure = BukkitAudiences.create(this);

        this.adventure.sender(Bukkit.getConsoleSender()).sendMessage(Component.text("Hey"));```
wary wren
#

and you get a ide error right?

quaint mantle
#

nope

wary wren
#

bcs i created a test project wi th spigot 1.17.1

quaint mantle
#

just when i reload the plugin

wary wren
#

so said to me that you cast something

noble lantern
wary wren
#

how precise do you need it?

quaint mantle
#

ohh

#

^

noble lantern
#

just within one block

#

1-2 doesnt need to be precise on a float

#

just precise on int

wary wren
#
public static double distance(Location first, Location second) {
        double x = first.getX() - second.getX();
        double y = first.getY() - second.getY();
        double z = first.getZ() - second.getZ();
        return Math.sqrt(x * x + y * y + z * z);
    }
noble lantern
wary wren
#

btw really hard

quaint mantle
wary wren
#

if you dont need y

#

you can cut it out

wary wren
#

I have a idea

noble lantern
#

as rn im async calling distance() and throwing results back to main thread

#

which is rly excessive

wary wren
#

give me a second

#

I used something before where i check it every tick

#

let me check what i have used there

noble lantern
#

kk ty!

vocal cloud
#

Wonder if there's some bit shifting hack for this

noble lantern
#

i was wondering same thing ngl

#

like some weird >>4&^6 shit

vocal cloud
#

Yeah where is my Quake 2 algorithm

noble lantern
#

i dont need the y distance

#

just x and z rly

#

ill do y handling seperate

wary wren
#

I checked and I can say from my experience calling that every tick with 50+ players is fine

#

That was on 1.8.8 too

noble lantern
#

what about per 50 players

#

as this is for npc pathfinding

#

so i need to calculate distance efficiently quickly to detect if the NPC is around a target range

wary wren
#

for npc you can use it anyway async

noble lantern
#

Yes but the overhead of creating the new future is meh

I wanted to avoid it

wary wren
#

if you don't need it

noble lantern
#

hahaha

#

perfect

#

now he places block instantly at the feet 🙂

ornate mantle
#

if i have like 20 projects that are interdependent to each other and i want commands for those projects, do i create another project that manages all commands, or do i add the commands in those projects?

vocal cloud
noble lantern
#

"another test"

noble lantern
ornate mantle
#

exactly

#

that question is irrelevant

#

anyways its not 20 different projects

#

its like 3

#

sorry lol

noble lantern
#

Just saying it sounds like a design hindering/annoyance

Why not merge some of these together? Or create a core API provider, and then build plugins on top of that?

Like creating another project only to handle commands? Why are you creating so many differents projects for this stuff xD?

#

ahh

#

in that case, i would just have your "core" commands in your plugin

And your addon plugins could hook in sub arguments to said command

ornate mantle
#

alr ty

#

i dont like making a core api

#

mainly because idk what to put in it

noble lantern
#

it would just be stuff your gonna constantly be reusing

#

so like util classes, command handler

#

etc

ornate mantle
#

alr :D

#

i just have a utils class for each project but ok

noble lantern
#

Its mainly there just so you dont gotta rewrite your code in each plugin ever time, just a convieniece thing

#

yep core libs would make it so all plugins have the utils class

And ofc your plugin can have its won set of utils too as it likely will need them

#

the core api utils would just have stuff like string transforming, maybe some meta data handling, just stuff like that

ornate mantle
#

epic

rain mason
#

how would I get a player's location in a different world? currently, when I teleport a player to a different world, I can only teleport them to specific coordinates, instead of their last positionjava Location loc = Bukkit.getWorld("ocm").getLastLocationOfPlayer(p); p.teleport(loc); // something like this

ornate mantle
#

where does spigot store the data of players?

#

like inventory, location, etc

#

oh nvm

rain mason
hasty obsidian
#

Attributes

hybrid spoke
#

@noble lantern did the walking strategy work?

severe turret
#

You need to store data yourself

rain mason
severe turret
#

okay

#

lets say

#

you want to store the player location when they tp

#

so you can tp them back

#

like a back command

#

so you have a ConcurrentHashMap

rain mason
#

no, just teleporting between worlds

#

player teleports to different world > later teleport them back to their original position in world1

severe turret
#

Same principle

#

Make a OnPlayerWorldChange event listener

#

get a ConcurrentHashMap

#

with UUID Loc keys values

#

save when they change world

#

when they go back load from the hashmap

hybrid spoke
#

Pathfinder

rain mason
severe turret
#

I don't understand what you want to so

#

do*

rain mason
#

player plays in world1, player teleports to world2, does something, and later teleports back to world1 with their last location

severe turret
#

yes

#

That doesn't save anywhere

rain mason
#

it does thooooo

severe turret
#

files update either periodically

hybrid spoke
severe turret
#

or on player quit

#

also

#

what method is .getLastLocationOfPlayer

#

that doesn't exist

rain mason
#

it was literally an example

#

of what I wanted

severe turret
#

xd

#

that's why I'm telling you

#

to do what I say

#

You need to save the player data

#

into a map in an event

#

when they change world

#

and when they type a command

#

they get back to that location

rain mason
hybrid spoke
#

but dont use a concurrent hash map

severe turret
#

but working with a map while the server is onlinw

#

is way better

#

the idea is that

#

while the player is online you interact with the map

#

and if they go offline you save their data into the file

#

and then when they join you load the data from the file into the map

#

if that makes sense

#

think of it as when you want a drink

#

you place a bottle near yourself

#

so when you want to drink you don't have to walk to kitchen for water

rain mason
#

alr, does the plugin's onDisable fire when I stop/reload?

#

just so I can save the map to a json file, and then onEnable just load it back

severe turret
#

I'm not sure

#

no you wouldn't use onEnable

#

you would use an event when player joins

#

It's useless to load data from player that isn't on the server to the map

rain mason
#

i know, just save the whole Map to .json, and then onEnable just load the Map back, and when the player joins just get the location from the Map

hasty obsidian
#

Heal if player not near

severe turret
#

noo

rain mason
#

or is it just easier to load somefolder/UUID.json?

severe turret
#

listen

#

make a new class for the listeners

#

both onPlayerChangeWorld

#

and onPlayerJoin

#

and onPlayerQuit

#

then

rain mason
#

so like onPlayerJoin = load json file, onPlayerChangeWorld = teleport with location+save json file, onPlayerQuit = save json file?

severe turret
#

onPlayerChangeWorld -> save the player uuid and location to hashmap

#

onPlayerQuit -> save the UUID : location pair of the player who left to json

#

onPlayerJoin -> check if the player has a file with their uuid if yes load it into the map

#

something like that

rain mason
#

okay

opaque sinew
#

Is there a plugin where you can add when join a server, you will automatically be in a lobby of some sort, then type the password of the users account then you'll be tped where you last left off?

#

Sorry if im interrupting something

hasty obsidian
#

does anyone know how do I check if player is near

hot wolf
#

Sorry, but I got a rather short question. I made an object called Homes for some reason though, H2 won't let me insert it into the db, even though that column is an object. I tried finding it on the internet, but didn't seem to find anything specific. Do I have to add a Serializable interface to my class?

hybrid spoke
hasty obsidian
#

thanks

severe turret
rain mason
# opaque sinew Sorry if im interrupting something

nah we already finished, I did it this way: java @EventHandler public void onJoin(PlayerJoinEvent e) { Player plr = e.getPlayer(); plr.teleport(Bukkit.getWorld("something"), 0, 0, 0); }and then teleport them to a different world when they /login or something

hybrid spoke
hybrid spoke
#

exactly

rain mason
#

also if you have some sort of /teleport or /hub or something, make sure to disable the usage before the user actually logs in

#

@opaque sinew **

hybrid spoke
#

we dont want to help a cracked server

rain mason
severe turret
#

Why not

#

who cares if it's cracked or not

hybrid spoke
#

mojang does

severe turret
#

I don't think you telling them how to do something

#

will make bill gates come to your house

#

and break your arm

rain mason
#

yes

hybrid spoke
#

spigot is subject to mojang

rain mason
#

i honestly hate cracked servers because I actually bought minecraft, but a lot of my friends still have tlauncher

opaque sinew
#

same\

hybrid spoke
#

piracy is simply not allowed

#

so we dont support it here either

severe turret
#

You're not supporting it

hybrid spoke
#

by helping we do, thats the definition of support

#

let them die their own death

opaque sinew
#

i was thinking about turning off tlauncher due to people able to access account simply by changing their user

hybrid spoke
#

just turn it off

#

they wont buy shit anyways

#

so they are not even customers

severe turret
#

and?

hybrid spoke
#

the only loss is the player count

#

and that doesnt matter on a cracked server

severe turret
#

Some people just want to play the game

hybrid spoke
#

which they illegally cracked

#

yes

severe turret
#

The fact is the game costs 20$ and for someone that is a lot of money

hybrid spoke
#

doesnt matter

severe turret
#

especially when target audience of Minecraft is kids

hybrid spoke
#

i dont steal clothes just because i cant afford them

severe turret
#

Well you can stop being arrogant about people who cannot afford it

#

?

#

It's not your job to be angry about someone who cracks it

#

If you want to

#

get hired by mojang

rain mason
hybrid spoke
#

he wont understand anyways

severe turret
#

Ah yes

hybrid spoke
#

thats nothing opinion based

severe turret
#

So you are the guardian of the righteous

rain mason
#

i would love to only allow bought JE and xbox accounts on BE, but that just isn't possible

severe turret
#

I'm sure jeb_ won't be able to buy bread because of someone pirating Minecraft

hybrid spoke
#

how old are you?

severe turret
#

I'd gladly ask the same of you

#

You're not affiliated with Mojang in any way

#

so why does it matter to you

hybrid spoke
#

so either you are ridiculously young or didnt went to school

severe turret
#

Talk about school and fuck up grammar

hybrid spoke
#

lmao

severe turret
#

lmao

hybrid spoke
#

go steal some clothes you cant afford

severe turret
#

My bad

#

Mister Lucifer

#

How cringe is it naming yourself that on 3 platforms

#

Surely you don't wake up every day feeling like anime mc

hybrid spoke
severe turret
#

same

hybrid spoke
#

good to know that you prove yourself to be ridiculously young

severe turret
#

?

#

No I think you're young

hybrid spoke
#

ok

hasty obsidian
noble lantern
hybrid spoke