#help-development

1 messages · Page 2016 of 1

quaint mantle
#

@lost matrix Now its taking all the coins and crashing

brave sparrow
#

The coin removal isn’t causing the crash

lost matrix
wet breach
#

I do suppose we should have asked which mc version they were using. Because if it is obsolete in newer versions then it would explain why they are getting the assert TRAP if that is case, because they are on an outdated version XD

brave sparrow
#

That’s why I’m asking about N

quaint mantle
brave sparrow
#

That’s still not why it’s crashing

quaint mantle
#

oh alr

wet breach
#

Alex's curiosity intensifies

lost matrix
#

Imma look up what N is and not post it

quaint mantle
#

@lost matrix now its taking an item 1 by one and after the last one, when there is no more items, crashes

brave sparrow
quaint mantle
#
ItemStack removeItem = item.clone();
                    removeItem.setAmount(1);
                    p.getInventory().removeItem(removeItem);
quaint mantle
brave sparrow
#

That’s not weird

quaint mantle
#

so if im not holding the item

#

it removes it

brave sparrow
#

That’s what that method does

quaint mantle
#

oh

quaint mantle
brave sparrow
#

@quaint mantle follow the link I sent you and do it please

#

Specifically the “deobfuscating” section

lost matrix
#

Btw using the method like this is quite expensive.

wet breach
#

sounds like you didn't properly set the condition for when the loop should exit XD

#

or, you are making use of updated methods thus a loop not necessary

quaint mantle
#

Used FileUtils, but doesn't copy the world contents.

lost matrix
quaint mantle
#

@brave sparrow Found it, N is actually a crash report value

#

It means that the item was attempted to be set to null basically

#

Thats all N stands for

#

And it seems to only happen under certain circumstances

brave sparrow
#

@quaint mantle seems like you’re trying to set it to 0 somewhere still then

earnest forum
#

u cant program with the server jar

#

u need to use buildtools

quaint mantle
#

and i remove 1 of it

earnest forum
#

been changed since 1.17

tall dragon
#

?bootstrap

undone axleBOT
#

Bootstrap Jar
The main spigot-1.18.jar is now a bootstrap jar which contains all libraries. You cannot directly depend on this jar. You should depend on Spigot/Spigot-API/target/spigot-api-1.18-R0.1-SNAPSHOT-shaded.jar, or the entire contents of the bundler directory from your server, or use a dependency manager such as Maven or Gradle to handle this automatically.

Please read the release notes for further information: https://www.spigotmc.org/threads/9-years-of-spigotmc-spigot-bungeecord-1-18-1-18-1-release.534760/#post-4305163

quaint mantle
#

it sets to 0

brave sparrow
quaint mantle
#
ItemStack removeItem = item.clone();
                    removeItem.setAmount(1);
                    p.getInventory().removeItem(removeItem);
#

if items amount is already one

#

and we remove 1 from 1

#

its gunna equal 0

brave sparrow
#

Ok so that’s not the issue

#

Can you deobfuscate the entire crash report

#

And send it over

#

With the link I sent you it should tell you how

quaint mantle
#

that confused me so i revese searched the error

#

and translated some chinese mc server site

#

and found info about the error

#

lmfao

brave sparrow
#

Yeah don’t do that

#

Lol

#

What part confused you

quaint mantle
#

using proguard

brave sparrow
#

What about that confused you

#

You download and run it

quaint mantle
#

i have 6 braincells ok

#

things take me longer to process

brave sparrow
#

Lol

#

Well go ahead and do it

vocal cloud
#

Man people need to not use obfuscation in development

lost matrix
#

The problem here is that the ItemStack is used after the event fired. And if the ItemStack is then null even when
its expected that the clicked ItemStack is not null then we get this kind of error. So my suggestion is:
Either cancel the event or cancel it and remove the items one tick later.

wet breach
#

obfuscation is not being used

#

the error being thrown is in obfuscated code of the server

quaint mantle
#

@lost matrix WAIT I SEE WHY YOU HAVE TO CANCEL IT NOW

#

cause its trying to interact at the same time of using the item

brave sparrow
#

Yes

quaint mantle
#

SO if its removed at the exact same time

wet breach
#

Ah JD finally got it 🙂

brave sparrow
#

Lol

quaint mantle
#

it crashes due to it not being able to process it correctly

#

fuck im an idiot

#

i stg

#

that took WAY to long to click in

brave sparrow
#

Just saying if I had the damn crash report deobfuscated I could’ve told you that 20 minutes ago

#

😂

quaint mantle
wet breach
brave sparrow
quaint mantle
#

Yay it worked

#

Lol

wet breach
#

@NotNull

#

ItemStacks are not supposed to be null

#

You can cause them to be null for a final state, and that is where the assertion error is coming in

quaint mantle
#

sorry for being an idiot lol

brave sparrow
quaint mantle
#

same thing with .remove and .removeItem

#

and similar functions related to ItemStack

#

which kinda makes sense

brave sparrow
wet breach
brave sparrow
#

All I can look at from mobile is the Mojang repo which is why I wanted you to deobfuscate the crash report for me

brave sparrow
#

That explains it

quaint mantle
devout canyon
#
<dependency>
    <groupId>org.spigotmc</groupId>
    <artifactId>spigot</artifactId>
    <version>1.18.1-R0.1-SNAPSHOT</version>
    <scope>provided</scope>
</dependency>
#

why is it that this version works but no others do in pom.xml?

vocal cloud
#

Did you run the buildtools for those versions?

brave sparrow
#

^ You have to run buildtools for each version you plan to use

wet breach
#

so to recap how assert TRAP gets thrown as it is an assertion error. It is from annotations where in the api something has @NotNull. Java doesn't care about objects being null, so as long as you are not trying act on the null object itself. As long as that isn't the case you don't get an NPE. However in the case above, the final state of the ItemStack was it being null. That is everything in the code acted on the ItemStack while it wasn't null, but the final product was that it is now Null. Because of @NotNull for the ItemStack, annotations throws an error as it violates what the API stated for it.

#

hope that makes sense, and now have learned what assert TRAP means 🙂

devout canyon
#

if I do it with buildtools it says no packages exist when I use NMS things

#

I have it set up the same way in 1.18.1 and that one works, but not for 1.17.1

undone axleBOT
#

Bootstrap Jar
The main spigot-1.18.jar is now a bootstrap jar which contains all libraries. You cannot directly depend on this jar. You should depend on Spigot/Spigot-API/target/spigot-api-1.18-R0.1-SNAPSHOT-shaded.jar, or the entire contents of the bundler directory from your server, or use a dependency manager such as Maven or Gradle to handle this automatically.

Please read the release notes for further information: https://www.spigotmc.org/threads/9-years-of-spigotmc-spigot-bungeecord-1-18-1-18-1-release.534760/#post-4305163

wet breach
#

read the post

#

it will tell you the appropriate way to do NMS things and what needs to be added to the pom. And other helpful related things

devout canyon
#

I should've clarified, I've gotten 1.18 to work fine, but I'm having issues with 1.17

#

these are red for some reason

wet breach
#

so, basically what you did for 1.18 you also do for 1.17

quaint mantle
#

How would I prevent a custom item to be used in crafting recipes?

#

EX: a nether star

lost matrix
night torrent
#

I put my .jar file in my plugins folder, but when i run "/plugins" it says there are 0 plugins?

lost matrix
night torrent
#

I did /reload

lost matrix
quaint mantle
night torrent
#

ok

lost matrix
quaint mantle
night torrent
#

I restarted my server, still nothing.

lost matrix
night torrent
#

one sec

#

oh wow

#

wrong version

lost matrix
quaint mantle
#

what would i do then lol

lost matrix
# quaint mantle ?
    @EventHandler
    public void onCraft(PrepareItemCraftEvent event) {
      for (ItemStack itemStack : event.getInventory().getMatrix()) {
        if (isForbiddenCraftingIngredient(itemStack)) {
          event.getInventory().setResult(null);
          return;
        }
      }
    }

    private boolean isForbiddenCraftingIngredient(ItemStack itemStack) {
      if (itemStack == null) {
        return false;
      }
        // Do some checks here
      return false;
    }
wet breach
lost matrix
#

On default nothing is forbidden. So i just returned false.
I think you would do some checks and then return true in the middle somewhere

wet breach
#

ah ok, cause was going to say, if statement kind of pointless to have anything in the brackets if it always returns false XD

lost matrix
#

Like this would make all gold and diamond recipes useless:

    private boolean isForbiddenCraftingIngredient(ItemStack itemStack) {
        if (itemStack == null) {
            return false;
        }
        if (itemStack.getType().name().contains("GOLD")) {
            return true;
        }
        if (itemStack.getType().name().contains("DIAMOND")) {
            return true;
        }
        return false;
    }
night torrent
#

does anyone know why this isn't working?

lost matrix
#

?notworking

undone axleBOT
#

"Does not working" is a useless statement. Please describe what exactly is not working, what you expect it to do, and what actually happens. If you get any console errors, also ?paste the entire stacktrace.

night torrent
#

It's supposed to explode the player when you step on stone

#

and nothing happens when you stand on stone

lost matrix
night torrent
#

oh

#

how do I make it so when he stands on it

lost matrix
#

Also you should get the world from the player. Imagine if he steps on stone in the nether and somewhere in the overworld at that location
a block explodes

night torrent
#

I did that, but i changed it back because i thought that might be the issue

lost matrix
#

You should use Block#getRelative(BlockFace) for that.

night torrent
#

ok, thanks

#

how would I apply that to the current situation?

lost matrix
# night torrent ok, thanks
    @EventHandler
    public void onMove(PlayerMoveEvent event) {
        Player player = event.getPlayer();
        Block standingOn = player.getLocation().getBlock().getRelative(BlockFace.DOWN);
        if (standingOn.getType() == Material.STONE) {
            // Do stuff
        }
    }

Or if you want to be a bit more precise:

    @EventHandler
    public void onMove(PlayerMoveEvent event) {
        Player player = event.getPlayer();
        Block standingOn = player.getLocation().subtract(0, 0.1, 0).getBlock();
        if (standingOn.getType() == Material.STONE) {
            // Do stuff
        }
    }
night torrent
#

wow, thanks!

wet breach
lost matrix
#

Would be super random

wet breach
#

but still hilarious

#

in fact would make for interesting game mode based on this

#

doing something in one world, makes something happen in another

lost matrix
#

Two teams on different dimensions battling each other. Sounds like fun

hybrid spoke
#

spleef on 2 worlds lol

night torrent
#

what does the line through a word mean?

#

like block.getData()

lost matrix
night torrent
#

ok

hybrid spoke
#

depends on the deprecation-cause/reason

night torrent
#

Im trying to summon a falling block

hybrid spoke
#

don't correct yourself before i can flame on it

lost matrix
#

In most cases its marked for removal. Sometimes its for draft api and in rare cases its to prevent derpy people from using the method
because they dont understand the implications (looking at you Bukkit#getPlayer(String))

night torrent
#

Alright, thanks!

#

Can I also get a little help on the falling block thing? I'm trying to make it so when you mine a block, a falling block disguised as whatever you mined spawns

#

this is my current code

quaint mantle
#

How would i code a command, that spawns 25 falling chests near you, about 1000 blocks in the sky, with loot?

#

(Aka a loot drop event)

#

Give me an example or rundown

#

Dont spoonfeed me

night torrent
#

🥄 🥕

quaint mantle
wet breach
#

since there is a height limit

quaint mantle
#

just high enough to where it cant be stuck

#

inside a mountain

#

xd

hybrid spoke
#

not sure but > height limit will prob. despawn

wet breach
#

anyways, get the players location, set a box around them or better known as a bounding box, spawn falling blocks however high they are entities. When they hit the ground or a block, make them solid blocks unless they do this on their own don't remember, and then grab the block which should be the chest block now and set their contents.

wet breach
#

unless you spawning them in a chunk that isn't loaded, but since they want it around the player they should be loaded 🙂

#

probably best you don't drop a falling block onto the player

#

well I really don't know what happens, but if it damages/kills them doing that, probably not something you want to do when trying to give them free stuff XD

#

well its a terrible way to give them stuff anyways

quaint mantle
#

so it does no damage

#

unless 2 are stacked on eachother

night torrent
#

how do you even spawn a falling block?

waxen plinth
#

World#spawnFallingBlock

night torrent
#

I've looked it up, I cant seem to understand it.

#

FallingBlock fBlock;
fBlock = player.getWorld().spawnFallingBlock(block.getLocation(), block.getBlockData());

#

why isn't this working?

devout canyon
quaint mantle
#

@wet breach how do I move a boundingBox?

#

contains?

night torrent
#

yo can someone help me with summoning a falling block

#

I'm trying to make it so when you break a block, a falling block spawns in its place

wet breach
#

not sure if there is method to reset the cords for it

quaint mantle
#

where it actually is

wet breach
#

if you need to move the box itself

#

you would use the shift method

quaint mantle
#

@wet breach so it shifts it to the location i desire?

wet breach
#

well there is 3 different methods for what it accepts

#

using a location will automatically shift it to that location

#

but keep its original size

#

if you need a different size box, there is the resize method

quaint mantle
#

and x2y2z2

#

whats the difference

wet breach
#

you need opposing corner cords to form a bounding box

quaint mantle
#

Oh, so one corner to another for sizing?

wet breach
#

yeah, but the corners I refer to are diagonal up/down from each other

quaint mantle
wet breach
#

or across if just making a 2d boundingbox

quaint mantle
#

so this would be a rectangle on the Y axis

#

its longest at Y

#

actually ill make Y 1

wet breach
#

do you not know what opposing corners are?

quaint mantle
#

no, ive only worked with Vectors before

#

not opposing corners

wet breach
#

ok, so a boundingbox is usually 3 dimensional

#

so the opposing corners is one corner from the top, and then if you were to go diagonal down to the opposite side on the bottom

#

the other corner

#

the only time this isn't true is if the boundingbox is 2dimensonal in that case it is just the corners diagonal from each other

quaint mantle
#

so hold on

night torrent
#

I'm trying to make it so when you break a block, a falling block spawns in its place. Nothing happens when I break a block.

quaint mantle
#

lettme draw this rq

wet breach
#

ok, take the 2d of what I said, but the other corner goes downwards for 3D

quaint mantle
#

and ask if thats correct

wet breach
#

that is the opposing corners I am referring to 🙂

quaint mantle
#

so if i wanted a 60 x 60 for x and z

#

id do 30 on 1 size

#

30 on the other?

wet breach
#

yep

quaint mantle
#

👍

#

box.resize(30, 0.5, 30,30,0.5,30); @wet breach

#

so this equals 60 1 60 60 1 60

#

ty

#

lol

wet breach
#

the way you are doing it is not correct though

quaint mantle
#

oh

devout canyon
wet breach
#

the numbers have to be mirrored

#

if you want to specify raw numbers

wet breach
#

so, lets say 30 on the x plane for example for a direction

#

the other number would need to be -30

#

because you have to specify in both directions

#

the bounding box is created around a center point

quaint mantle
#

OH

#
box.resize(30, 0.5, 30,-30,-0.5,-30);
#

so this would be correct then?

wet breach
#

that should work, but you can also specify 2 locations too and the utility class will take care of it for you

#

so you don't have to work out the math

quaint mantle
#

ah\

#

@wet breach so can shift move based on its current location?

#

ex: add 15 to the Y value

#

or smth

wet breach
#

sure

#

just because it takes in 3 values

#

doesn't mean you can't do 0,15,0

#

that would shift it only on the y value 🙂

#

that would move it up by 15 on the y

arctic moth
#

I just got $20 for destroying a salty streamer on stream in pvp while he was literally cheating and using op weapons and armor and then I won a pvp competition during the stream after that

#

Oh wait this is help

#

Oops

wet breach
#

o.O

quaint mantle
#

@wet breach Any events that can detect if a player is attacked by another player?

#

And get both players?

#

(Making a clan system)

earnest forum
#

entitydamagebyentityevent

quaint mantle
#

do i jsut compair each to players

#

or

earnest forum
#

yes

#

check if each entity is instanceof

#

player

#

and then cast

wet breach
#

as said above you can do instanceof checks

#

if(entity instanceOf Player)

earnest forum
#

if true then (Player) e.getEntity()

earnest forum
wet breach
#

all well, its what IDE's are for

#

I am sure they will get the point 😛

earnest forum
#

ahah true that

quaint mantle
#

Can i detect if somebody right clicks a player?

earnest forum
#

playerinteract event

#

i think u can see if theyre staring at a player

wet breach
earnest forum
#

it shouldf

#

player extend entity

wet breach
#

this event is thrown when right clicking on entities

wet breach
earnest forum
#

yeah true

wet breach
#

it is quite possible that in the implementation of the event I linked it checks if the entity is a player and then decides to not throw said event. But they could test it 😛

worldly ingot
#

I'm fairly confident that works for players

dusk flicker
#

Read implementation as impeachment somehow and was confused for a bit lol

earnest forum
#

is there a way to get what chunks the player is loading?

#

i know World#getLoadedChunks is a thing but i only want the chunks the player is loading

boreal tinsel
#

Hola, tienen imágenes de todos los Vehículos??

earnest forum
#

english only

boreal tinsel
#

F

#

Ñ

#

XD

quaint mantle
#

Any reason why this wouldnt work?

#
new ArrayList<String>().toArray(playerData.get("players." + player.getUniqueId().toString() + ".treaties"))
#

Claims its an object when I made it an ArrayList

#

@earnest forum you able to help me with above lol

#
getConfig().set(pString + ".treaties", new ArrayList<String>());
earnest forum
#

what are you trying to do?

quaint mantle
earnest forum
#

so

quaint mantle
#
for(int tD: treatyData){
                        Object obj = treatyData.get(tD);
                    }
earnest forum
quaint mantle
earnest forum
#

#getStringList(path)

quaint mantle
#

@earnest forum Cannot resolve method 'toArray(java.util.List<java.lang.String>)'

#

Oh.

earnest forum
#

ArrayList<String> list = playerData.getStringList(path)

#

should work

quaint mantle
#

yep

#

ty

earnest forum
#

np

quaint mantle
#

lol

#
for(String tD: treatyData){
    for(String cD: treatyClickData){
        if(tD.equals(clickedPlayer.getUniqueId().toString()) && cD.equals(player.getUniqueId().toString())){
            matched = true;
        }
    }
}
#

funny finding system lol

wet breach
#

and you would be able to check using some math to see if those chunks are indeed loaded

earnest forum
#

honestly im not too worried about the actual view range just the 3x3 chunks around the player

#

can u give me some pointers on how to do that?

quaint mantle
#

Final question: How would I send a message with an embeded function?

#

EX: Click here to accept

#

Kinda button

wet breach
#

player.getLocation.getChunk(); chunks are 16x16x256

worldly ingot
#

*y limit varies

earnest forum
#

ah i can use chunk positions

#

right?

wet breach
#

you can get chunk coords

#

yes

earnest forum
#

yea

wet breach
#

that is what I meant to show in my example 😛

worldly ingot
#

With an embedded function?

waxen plinth
#

Guessing he means lambda

worldly ingot
#

You mean text components that when clicked will run arbitrary code?

waxen plinth
#

/ anonymous class with overridden method

waxen plinth
#

Oh

quaint mantle
#

Ill show an example hold on.

waxen plinth
#

You have to write a command that is executed

worldly ingot
#

Don't even have to do that. Can be an unregistered command caught by PlayerCommandPreprocessEvent

quaint mantle
#
[CLICK TO ACCEPT]
(player clicks message)
Accepted successfully!
#

random il example

worldly ingot
#

In chat, yeah? Text components

quaint mantle
#

yea

waxen plinth
#

Yeah you'd need to handle that as a command

quaint mantle
waxen plinth
#

The way those work is by having the client send a command when the text is clicked

#

The server then receives the command and carries out the desired action

#

Come to think of it, it would be pretty nifty to have a library for using lambdas for that instead of needing to handle commands

worldly ingot
#

But again,

Can be an unregistered command caught by PlayerCommandPreprocessEvent
Though if you take that approach, I'd advise that you make it some command name that otherwise wouldn't make much sense to execute

waxen plinth
#

I would probably have it generate a UUID for each lambda

#

Then the command would be /clickhook:clicked [uuid]

quaint mantle
#

Are there any tutorials I can watch to learn this?

#

(That anybody knows of)

#

Actually, honestly wonder if it be easier to make it an InventoryUI

waxen plinth
#

It most likely would be

quaint mantle
#

my old one i hated how it looked

#

so i redid it

waxen plinth
#

I guess

quaint mantle
#

Any suggestions?

waxen plinth
#

Lots of things going on here

#

Too much for one method

#

You should be using early return

#

You should be using constants rather than creating a new NamespacedKey every time you need one

#

Ideally you would have some helper methods to get known properties stored in persistent data containers

#

There's a fair bit of duplicated code, like redefining variables in different branches that have the same values (a player variable, for example)

#

Really, this method is just doing way too much

quaint mantle
#

I couldnt think of a way to split it all up

waxen plinth
#

You should split up the responsibilities into a lot of smaller methods that perform the individual tasks this method performs

quaint mantle
waxen plinth
#

For example, you could have a Crate class which represents a crate in the world

#

You could have a method to get a crate for a given block, returning a Crate or null if there is no crate at that location

#

When a player clicks, you check if the block is a Crate, and then you check if they item they are holding is the key for that crate

quaint mantle
#

So basically: Split it all up, its WAY too messy in its current state, and jumbled for no reason

#

And fix some issues with repeating variables/constants

waxen plinth
#

Yes

#

You shouldn't be doing new NamespacedKey inline

#

You should pretty much always be using constants for those

#

And ideally you should have a helper/utility class which can retrieve specific properties that are stored in PDC

#

Oh and of course early return

quaint mantle
#

Ah, so create a new dataClass (which is what I called helper/utility classes btw lol), to store PDC's based on name and retrieve them, EG: I could retrieve a PDC called "crateKey" but doing PDC.get("crateKey")

#

or smth along the lines of that

waxen plinth
#

Early return is a very simple pattern that makes your code much cleaner

quaint mantle
#

OH WAIT

#

nvm I know what you mean

waxen plinth
#
if (condition1) {
  someLogic();
  if (condition2) {
    someMoreLogic();
    if (condition3) {
      ...
    }
  }
}```
quaint mantle
#

Forgot for a sec

waxen plinth
#

vs

quaint mantle
#

I can see what you mean

waxen plinth
#
if (!condition1) {
  return;
}
someLogic();
if (!condition2) {
  return;
}
someMoreLogic();
if (!condition3) {
  return;
}
...```
#

Makes it much more linear and easy to follow

quaint mantle
young knoll
#

but my staircases

quaint mantle
#
if (!condition1) {return;}
someLogic();
if (!condition2) {return;}
someMoreLogic();
if (!condition3) {return;}
...
waxen plinth
#

No

quaint mantle
#

?

#

Why

#

Does that cause issues or

waxen plinth
#

2 reasons

#

Firstly, there is already a special syntax for single-line code bodies for if statements and loops and such

#
if (!condition1) return;
someLogic();
if (!condition2) return;```
quaint mantle
#

oh yea you can do that as well

waxen plinth
#

Secondly, while this is more compact, it is not more readable

young knoll
#

I prefer

waxen plinth
#

More compact code is not always preferable

#

And the official google style guide for java recommends to always use braces around code bodies

young knoll
#

public void blah() {
return;
}

#

The most readable

devout canyon
#

I typically do it like

if (condition)
  thing();
waxen plinth
#

Because otherwise it can be unclear what the code flow is

waxen plinth
young knoll
#

I use braces for everything but return

devout canyon
#

yeah it's personal preference with that type of thing

waxen plinth
#

It barely takes up any more space and makes it much harder to misinterpret

river oracle
#

Maybe It's Just me but I think braces make code much easier to follow

young knoll
#

Takes up 2 extra bytes at least

#

Can’t be having that

waxen plinth
#

Yeah they do make it easier to follow

#

That's why a good number of modern languages are opting to not allow for that syntax of one-line code bodies

devout canyon
#

then there's python

waxen plinth
#

We don't talk about python

quaint mantle
#

why is python bad lol

#

ive never done it before

young knoll
#

Because indents

waxen plinth
#

Many reasons

#

The main few are that it's incredibly slow, dynamically typed, and has a tendency to entrap beginners and make them not learn the skills they need

young knoll
#

if ():
if ():

devout canyon
#

blocks are tab-based instead in curly braces, but the part I hate the most is how the package management thing breaks every single time I use it lol

#

but it just works in pycharm

young knoll
#

Sometimes dynamic typing is nice

waxen plinth
#

Almost never

young knoll
#

It’s so easy sometimes

waxen plinth
#

With good type inference and shadowing there's virtually no benefits to dynamic typing

#

Look at rust

#

You can just

young knoll
#

Who cares if it’s a string and not an int, python will take it and love it

waxen plinth
#
let x = 4;
let x = "hello";```
devout canyon
#

sometimes dynamic typing confuses me more lol

waxen plinth
#

Static typing makes for better autocomplete in IDEs too

#

Dynamic typing is just objectively terrible

young knoll
#

This is true

waxen plinth
#

The only "advantage" it provides over a good type inference system is that you don't have to specify types of method parameters or return types

earnest forum
#

anyone know difference between runTaskTimer and runTaskTimerAsynchronously?

waxen plinth
#

So you save a few characters

young knoll
#

Ones async

#

One is not

waxen plinth
#

The other is synchronous

#

Seems pretty clear

earnest forum
#

yes but what does that mean functionalitywise

#

reduce lag?

devout canyon
#

async makes its own thread right?

young knoll
#

No

waxen plinth
#

It doesn't make its own thread, I believe there's just a dedicated worker thread it runs on

young knoll
#

It’s a pool

devout canyon
#

ah

young knoll
#

Idk how big the pool is tho

waxen plinth
#

About 3 large

young knoll
#

Async is a beginners trap

#

Sure it can make stuff faster, but it can also not

young knoll
#

And you can’t use most of the API async

waxen plinth
#

It's best to avoid async programming until you have a solid grasp of sync programming

#

Which does take quite a while

wet breach
waxen plinth
#

Then again

#

You could always use rust

earnest forum
#

so if im doing maths with particles to create a circle in a runnable do i use async or sync

wet breach
#

parallel programming 😄

waxen plinth
#

It has guaranteed memory and thread safety from the compiler

#

Do it sync

young knoll
#

Rust simp

waxen plinth
#

Yeah I am lol

#

Rust is amazing

young knoll
#

Yeah well

#

Make a rust adapter for spigot plugins

wet breach
waxen plinth
#

What

#

How does that have to do with anything

young knoll
#

You can spawn particles async*

#

I think

waxen plinth
#

That's not what I'm talking about

young knoll
#

(Don’t mind them, they are a troll)

waxen plinth
#

I'm saying the compiler guarantees that your code will be thread safe and memory safe

#

Or it won't compile

wet breach
#

until you just make it compile XD

quaint mantle
#

yea that person game yesterday night and was trolling

young knoll
#

Oh no

waxen plinth
#

You're certainly aggressive for no reason

young knoll
#

My feelings

quaint mantle
#

they swear alot and are generally toxic

devout canyon
#

do you use arch btw

waxen plinth
#

I do

devout canyon
#

I knew it lmao

quaint mantle
#

im not a troll you absolute braindead twat
im sorry whos braindead here me or you at this point

#

if you dont see how your being toxic i have more braincells then you

young knoll
#

Don’t feed the trolls

waxen plinth
quaint mantle
waxen plinth
#

A story in three parts

#

You're not posting any constructive criticism, you're coming out guns blazing after misunderstanding something you read in chat

young knoll
#

Gosh dangit you guys are bad at this

#

New topic

#

How’ll y’all like skript

waxen plinth
#

Bait

quaint mantle
#

Ill leave this:

Constructive critic is what @waxen plinth gave me earlier, they are nice, and told me what was wrong, how to fix it, etc
What you did was the exact opposite, you made others feel bad because they did something wrong in some way.

young knoll
#

Tbf skript is fine for like

#

Simple things

vocal cloud
#

Block and move on

quaint mantle
#

never heard of skript

waxen plinth
young knoll
#

I wonder what the overhead of just having it installed is though

waxen plinth
#

They misread something in chat and then started cussing people out over it

waxen plinth
#

And now they're upset that people are upset at them over it lol

quaint mantle
#

Now tell me if im wrong

#

but isnt minehut a server host

#

or are we talking about server hosts

young knoll
#

Yes

waxen plinth
#

I mean I guess

young knoll
#

It’s a free server host

#

I think they have paid too

vale ember
#

why even when i am cancelling EntityCombustEvent the entity is still starting to burn in daytime ?

earnest forum
#

fr

young knoll
#

What does that have to do with it

#

It should be

vale ember
#

well, how can i make my zombies not burn at daytime (not just damage, but visually too)

vocal cloud
#

?jd-s

undone axleBOT
earnest forum
#

really annoying how intellij's prediction thing is case sensitive

young knoll
#

Throw an item on their head

#

Something like a button so you can’t see it

earnest forum
#

Math.p doesnt show Math.PI as an autocomplete thing

#

i have to use capital P

waxen plinth
#
  • give them fire resistance
#
  • give them a helmet
earnest forum
#

cant believe intellij isnt feeding my laziness 🙄

waxen plinth
#

(any item counts as a helmet, even ones that won't display on their head)

#

(you can put a red mushroom and I think it won't even render since it'll be fully inside their head)

young knoll
#

Make an entire custom NMS entity just to override it

#

Heh

vocal cloud
#

Just give fire resist without particles and you're fine.

vale ember
#
  • the fire resistance don't remove flame visually
  • i don't want to give them helmets
waxen plinth
#

Not 100% sure that will work

#

Fire resistant mobs can still be set on fire, they just won't take damage

quaint mantle
#

bad idea for 2 reasons

  1. Making it so they never burn in any case would causes issues, like lava, fireballs, etc.
  2. Mobs to max health means they cant die, why?
vocal cloud
#

The helmet is invisible

waxen plinth
#

You can set any item

quaint mantle
#

right?

waxen plinth
#

Flame is not the potion effect

young knoll
#

Yeah the potion effect

waxen plinth
#

Fire resistance is

young knoll
#

But not fire

quaint mantle
#

i cant even say your wrong touche

vale ember
quaint mantle
young knoll
#

I forgot Mojang split fire up to visual and non visual

waxen plinth
#

Why did they

vale ember
young knoll
#

Good question

wet breach
#

pretty sure

vale ember
#

ok thanks then

young knoll
#

Research time

wet breach
waxen plinth
#

Yeah multiple people suggested this and were ignored

wet breach
#

like, having fire that doesn't burn you

#

or having the burn effect without fire

young knoll
#

Research has yielded nothing

#

I assume they just felt nice to us modders one day

wet breach
#

like, lets say you want to simulate sunburns, wouldn't make sense to have a burn effect and also be on fire

vocal cloud
#

The helmet works best because then they can burn with other effects without burning during the daylight

earnest forum
#

can i stop the velocity of a firework spark particle

waxen plinth
#

I believe so, you just have to set the speed to 0

vocal cloud
earnest forum
#

im using Player#spawnParticle

young knoll
#

Try setting speed to 0

#

If that doesn’t work, then no you can’t

wet breach
#

@quaint mantle just because you remove your message, doesn't mean it doesn't get logged just fyi

earnest forum
#

which argument is that

waxen plinth
#

I didn't even see the message

wet breach
#

they made a rude comment

waxen plinth
#

Naturally

earnest forum
#

time for javadoc

wet breach
#

but not every good programmer tells people they suck

earnest forum
#

i dont see anything about speed

vocal cloud
#

Except a joke is supposed to be funny

earnest forum
#

this is from player not world

vocal cloud
#

And you're not

young knoll
#

Double extra is speed

earnest forum
#

thanks

vocal cloud
earnest forum
#

weird individual

devout canyon
#

from a spigot forum post:

EntityCombustEvent
Check Entity etc.
Check Entity#getHighestBlockAt (if i'm not wrong) and so check if it's null/air
Check time (day)
If #getHighestBlockAt returns null/AIR they're burning under a sun. Cancel the event

waxen plinth
#

arach have you considered chilling out a bit

vocal cloud
#

You're so boring kid get a life

young knoll
#

Combust event should have a reason

wet breach
#

and you say you are not a troll, so far you haven't been very convincing on that

young knoll
wet breach
quaint mantle
#

Anybody able to test something with me?

young knoll
#

True

wet breach
#

there is entitycombustbyblock event and entitycombustbyentity event

quaint mantle
#

It requires multiple players.

young knoll
#

I wonder

#

Which one is fired for sunlight

wet breach
#

and then you have entitycombust event for everything else

young knoll
#

It’s not a block or an entity

young knoll
earnest forum
#

do i fix this by changing the t increment?

@Override
            public void run() {
                t = t + Math.PI/8;
                double x = r*cos(t);
                double y = 0.5;
                double z = r*sin(t);
                loc.add(x,y,z);
                p.spawnParticle(Particle.FIREWORKS_SPARK, loc, 1, 0, 0, 0, 0);
                loc.subtract(x,y,z);

            }
#

fix as in make it better

quaint mantle
earnest forum
#

more particles

young knoll
#

Use offline mode and then run a second client

#

Assuming your pc can handle that

#

Gottem

vocal cloud
#

Because you're boring.

earnest forum
#

so Math.PI/16 for 16 particles?

#

or just more than that

young knoll
#

32

#

You already have 16

earnest forum
#

ah thanks

#

also

#

can i stop it from falling, or is that just a property of that particle?

young knoll
#

Iirc just a property of that particle

wet breach
young knoll
#

How does that help

#

That’s still only 2 ways to differentiate

devout canyon
#

the particles just be like that, would be cool if they were customizable

waxen plinth
#

That's for taking damage, not beginning to burn

wet breach
#

burning causes damage o.O

young knoll
#

Not immediately

wet breach
#

and there is a damage cause for fire

#

only others can tell you how smart or not smart you are

devout canyon
#

idk if canceling damage would make the fire disappear

young knoll
#

IgnitionCause.SUNLIGHT, FIRE, LAVA, SOUL_FIRE, FIRE_ASPECT

#

Could be quite a few

quaint mantle
#

hey whats the difference between Double and Integer?

vocal cloud
#

I wonder how often that event is called.

young knoll
#

But you can setFireTicks

earnest forum
#

is there a way to make it spawn instantly? its like slowly spinning around

#

the particles, i mean

#

do i just set the 2nd double in runtasktimer to 0?

young knoll
#

Use a loop

wet breach
#

I don't have a chromebook o.O

young knoll
#

You can’t run a task with a period of 0 ticks

earnest forum
#

wait i have an idea

wet breach
#

uh think you mean a long

earnest forum
#

store an arraylist of locations

young knoll
#

No?

waxen plinth
#

What

earnest forum
#

that's made in the runnable

#

and then after spawn the particles

young knoll
#

Long is a 64 bit integer

waxen plinth
#

They do not mean a long

#

int is 32 bit integer

#

double is 64 bit floating point

earnest forum
#

what do you think coll?

young knoll
#

I mean you can

#

But why

waxen plinth
#

@quaint mantle The simplest answer is that Integer can only be whole numbers and Double can have a decimal point

young knoll
#

Just use a loop

earnest forum
#

i only want 1 of each particle to spawn

young knoll
#

Okay?

waxen plinth
#

But it's worth noting that those are both wrapper classes for the primitive types, which are int and double respectively

young knoll
#

Why would that be an issue

earnest forum
#

i mean

quaint mantle
devout canyon
#

are you using trig

quaint mantle
#

also, how do I check if a block is a TileState?

earnest forum
#

i want the particles to only start spawning when the player gets close

quaint mantle
#

to prevent errors w/ my code

young knoll
#

Block.getState instanceof TileState

earnest forum
#

the bukkit runnable continues to spawn them

earnest forum
young knoll
#

I see

waxen plinth
#

Then check if the player is close before spawning them

earnest forum
#

i took it from a video because im not up to that part of math yet

young knoll
#

Spawn them all in a single run of the runnable

#

With a loop

devout canyon
#

get nearby entities, check for players

earnest forum
#

i have the nearby stuff

#

its just the particles keep spawning

#

im gonna try out the loop

vale ember
#

so how would i do that?

young knoll
#

Small item

#

Mushroom, button, etc

wet breach
young knoll
#

(No)

wet breach
#

the only native 64bit primitive is the long

vale ember
#

that's in 1.18 ig, i am using 1.13 api

young knoll
#

No that’s just a bad troll

earnest forum
#
public static void spawnParticles(Block b, Player p) {

        Location loc = b.getLocation().add(0.5, 0.5, 0.5);
        double t = 0;
        double r = 5;

        for (int i = 0; i < 32; i++){
            t = t + Math.PI/32;
            double x = r*cos(t);
            double y = 0.5;
            double z = r*sin(t);
            loc.add(x,y,z);
            p.spawnParticle(Particle.FIREWORKS_SPARK, loc, 1, 0, 0, 0, 0);
            loc.subtract(x,y,z);
        }
    }
quaint mantle
#
while(!allowClose.get()){
            wait(50);
        }

        p.closeInventory();
#

Is something wrong here?

#

It errors here for some reason.

wet breach
#

you can stop with the rudeness now

earnest forum
#

i need to make this 360

waxen plinth
#

why do you feel the need to say this

young knoll
#

Because they are a troll

wet breach
young knoll
#

@ancient plank can we just end this now

earnest forum
waxen plinth
#

Yeah and you can also not piss people off for no reason

earnest forum
#

the t variable?

waxen plinth
#

I can go and yell at people on the street for no reason, but I don't because I don't want to ruin people's days for no reason

wet breach
#

@vagrant stratus

#

we have a troll that needs dealt with

#

at the very least a warning

#

XD

earnest forum
#

can someone help me with my issue

waxen plinth
#

Ban pls

#

Then stop acting like one

hasty prawn
#

Be an asshat, seems pretty clear.

waxen plinth
#

You're cussing people out and being extremely rude for no reason

tacit drift
young knoll
#

They have entered defense mode

wet breach
#

what are you worried about, you said you could do what you want?

waxen plinth
#

It's your fault because you're choosing to be extremely rude

devout canyon
#

maybe try turning pi/32 to pi/16? I'm just eyeballing it, I could be wrong

quaint mantle
waxen plinth
#

Sure you do

vocal cloud
#

They entered phase 2 of trolling where they pretend to be innocent

waxen plinth
#

"a mental condition"

quaint mantle
#

@tacit drift Okay but how would I delay it til it needs to be ran.

waxen plinth
#

so sorry to hear about your nondescript condition that's so rare they don't even have a name for it

earnest forum
#

i figured it out

waxen plinth
#

hope you get better

earnest forum
#

bukkit runnable

devout canyon
#

show us the metical records

young knoll
#

Hi optic

waxen plinth
#

Oh hi optic

hasty prawn
#

Lol

waxen plinth
#

Thank god

young knoll
#

Lol

waxen plinth
#

lol

vocal cloud
hasty prawn
wet breach
#

and there comes the ban hammer

devout canyon
#

🦀 ?

tacit drift
#

bened

waxen plinth
#

optic can you please just get them out of here

#

scroll up in chat, they've been consistently rude since they got here

young knoll
#

They were rude last night as well

waxen plinth
#

adding literally nothing to the chat other than making everyone annoyed

vocal cloud
#

Are you going to pretend you have tics and that you somehow manifest them in text?

devout canyon
#

why would you troll on a minecraft dev server 😂

young knoll
#

Tourette’s doesn’t even fit

waxen plinth
#

Okay that's not an excuse

young knoll
#

Generally Tourette’s isn’t only cursing at people

waxen plinth
#

Your response shouldn't be "I can do what I want and I've done nothing wrong"

#

It should be "sorry I'll work on that"

#

And then go work on it

quaint mantle
#

how do I get a bukkit runnables taskID?

#

to cancel the task

earnest forum
waxen plinth
#

Rather than trying to use it as an excuse to just piss everyone off

devout canyon
#

I have chronic apathy toward your "condition"

young knoll
#

Cancel it with the runnable refrence

#

Task IDs are legacy stuffs

earnest forum
#

do ```java
BukkitTask id = new BukkitRunnable() {}

wet breach
#

save the id in a list or something

#

for later

earnest forum
#

anyone whos good at maths help me make this vertical

young knoll
#

BukkitTask.cancel() > Bukkit.getScheduler.cancelTask

waxen plinth
#

Right see I'm not even insulting you, I'm saying that if you want to be here then you should show that you're at least trying to get your anger under control

earnest forum
#
public static void spawnParticles(Block b, Player p) {

        Location loc = b.getLocation().add(0.5, 0.5, 0.5);
        double t = 0;
        double r = 5;

        for (int i = 0; i < 64; i++){
            t = t + Math.PI/32;
            double x = r*cos(t);
            double y = 0.5;
            double z = r*sin(t);
            loc.add(x,y,z);
            p.spawnParticle(Particle.FIREWORKS_SPARK, loc, 1, 0, 0, 0, 0);
            loc.subtract(x,y,z);
        }
    }
waxen plinth
#

bruh

wet breach
earnest forum
#

yes

waxen plinth
#

why do I bother

wet breach
#

do you want it like a dome?

vocal cloud
#

Learn to control your anger yourself

devout canyon
#

I think you use cotangent somewhere

waxen plinth
#

arach how old are you

#

14?

earnest forum
#

im literally 14 and more mature than u

young knoll
#

I did say you shouldn’t feed the trolls

hasty prawn
#

Yeah at this point they should just be ignored lol

waxen plinth
#

almost like that's how learning works

earnest forum
#

lmao

hasty prawn
#

There's no point

wet breach
#

not everyone is great at mathmatical functions

waxen plinth
#

why are you talking? you clearly have no idea how to communicate with people lmao

wet breach
#

and that is ok

earnest forum
#

im good at maths im just not up to that part in school yet

wet breach
#

anyways you didn't answer my question

#

did you want it to be a dome?

#

wrong

waxen plinth
#

Okay and that sort of thing has to be learned

#

It's not like knowledge is static and unchanging

#

You learn by trying things out

devout canyon
#

I don't remember trig being in algebra

young knoll
#

Is algebra the one where they started adding letters

wet breach
#

you only need to know how to add and subtract at minimum. Multiplication is glorified addition and division is glorified subtraction

earnest forum
#
for (int i = 0; i < 64; i++){
            t = t + Math.PI/32;
            double x = r*cos(t);
            double y = 0.5;
            double z = r*sin(t);
            loc.add(x,y,z);
            p.spawnParticle(Particle.FIREWORKS_SPARK, loc, 1, 0, 0, 0, 0);
            loc.subtract(x,y,z);
        }

to make it vertical do i switch the x and y values?

young knoll
#

Yes

waxen plinth
#

That's not how this works

vocal cloud
#

If the only person complaining is you then maybe they're not the problem hmmm?

young knoll
#

Or the z and y

#

Depending on which axis you want

earnest forum
#

thanks

waxen plinth
#

Asking for help is fine as long as you're not being entitled about it

young knoll
#

And you listen

#

That’s the big one

earnest forum
waxen plinth
#

Asking and then not listening is a form of being entitled if you ask me

young knoll
#

Fair enough

quaint mantle
#
int schedule = Bukkit.getScheduler().scheduleSyncRepeatingTask(EmeraldsPlugin.jp, () -> {
            if(!allowClose.get() && !p.getOpenInventory().getTopInventory().equals(gui)) {
                p.openInventory(gui);
            }else if(allowClose.get()){
                p.closeInventory();
                Bukkit.getScheduler().cancelTask(schedule);
            }
        }, 0L, 0L);
wet breach
waxen plinth
#

Those kinds of people just want to be spoonfed

quaint mantle
#

Am I doing this correcctly?

waxen plinth
#

That won't work

earnest forum
# wet breach this is what I was asking if you wanted
for (int i = 0; i < 64; i++){
            t = t + Math.PI/32;
            double x = 0.5;
            double y = r*cos(t);
            double z = r*sin(t);
            loc.add(x,y,z);
            p.spawnParticle(Particle.FIREWORKS_SPARK, loc, 1, 0, 0, 0, 0);
            loc.subtract(x,y,z);
        }

would i need to set x to r*tan(t)?

young knoll
#

Use runTaskTimer

wet breach
#

since you want a sphere give me a sec to create the math 😛

young knoll
#

You can just cancel from within a timer with cancel()

waxen plinth
#

This is the one you should use

#
Bukkit.getScheduler().runTaskTimer(plugin, t -> {
  // do stuff
  if (shouldCancel) {
    t.cancel();
  }
}, 1, 1);```
earnest forum
#

i just formed some kind of a graph

#

in particles

#

ahahaha

waxen plinth
#

Yeah that's not a very good approach

wet breach
waxen plinth
#

uhh

earnest forum
waxen plinth
#

that's turning it from O(n^2) to O(n^3)

vocal cloud
#

Ferris wheel

waxen plinth
#

Yada, what are you trying to do again?

devout canyon
#

but it's a sphere tho

earnest forum
#

make a sphere

waxen plinth
#

I don't think you even need any trig for this

#

A sphere

#

Ok that's simple enough

young knoll
#

I assume you need n^3 for a sphere

waxen plinth
#

You don't

#

To fill it you would

#

But for only the surface you don't

young knoll
#

Oooh

waxen plinth
#

Easiest way is to project vectors outwards

young knoll
#

True

#

It’s like how Mojang does explosions

waxen plinth
#

Yada

earnest forum
#

i only want a circle on the x,y,z i dont want a solid sphere

waxen plinth
#

Does it matter if the points on the surface of the sphere are equidistant?

earnest forum
#

english pls

waxen plinth
#

What do you mean a circle on the x,y,z

earnest forum
#

a circle on each axis

#

that forms a structure of a sphere

waxen plinth
#

Wait

#

So you don't want a sphere

#

You just want 3 circles

earnest forum
#

yes

waxen plinth
#

Ok that's super easy

earnest forum
#

i think i know

#

let me try it out

#

and then ill tell u if it doesnt work

waxen plinth
#

No you don't need anything complicated at all

wet breach
#

um....probably shouldn't say this in many places then

vocal cloud
#

@vagrant stratus they're obviously trolling at this point.

young knoll
#

Optic plz

#

I’ll star your anti malware

hexed hatch
#

Imagine trolling the Spigot server

earnest forum
#
            t = t + Math.PI/32;
            double x = r*cos(t);
            double y = 0;
            double z = r*sin(t);
            loc.add(x,y,z);
            p.spawnParticle(Particle.FIREWORKS_SPARK, loc, 1, 0, 0, 0, 0);
            loc.subtract(x,y,z);

            loc.add(y,x,z);
            p.spawnParticle(Particle.FIREWORKS_SPARK, loc, 1, 0, 0, 0, 0);
            loc.subtract(y,x,z);

            loc.add(x,z,y);
            p.spawnParticle(Particle.FIREWORKS_SPARK, loc, 1, 0, 0, 0, 0);
            loc.subtract(x,z,y);

this will work no?

waxen plinth
#

No

young knoll
#

Why do you subtract xyz

waxen plinth
#

You're mutating the location

#

Oh

earnest forum
#

it does

young knoll
#

And then add it back right away

earnest forum
#

look at it carefully

young knoll
#

Oh yeah

devout canyon
#

cuz the spigot fills the bukkit

young knoll
#

I can read I swear

earnest forum
#

it works perfectly

quaint mantle
#

@waxen plinth How do I cancel this properly?

BukkitTask task = new BukkitRunnable() {
            public void run() {
                if(!allowClose.get() && !p.getOpenInventory().getTopInventory().equals(gui)) {
                    p.openInventory(gui);
                }else if(allowClose.get()){
                    p.closeInventory();
                    task.cancel();
                }
            }
        }.runTaskTimer(EmeraldsPlugin.jp,0,0);
earnest forum
#

thanks all of you for helping

quaint mantle
#

Its also blanking out

#

I dont get how to do this clearly lol

quaint mantle
waxen plinth
#
Vector v = new Vector(5, 0, 0);
Location center; // assume this is populated
for (int angle = 0; angle < 360; angle += 10) {
  v.rotateAroundY(Math.toRadians(angle));
  Location loc = center.clone().add(v);
  // spawn particle at loc
}```
quaint mantle
#

and leaves a warning

waxen plinth
#

Something like this should work

wet breach
#

oh finally

devout canyon
#

he got beaned

waxen plinth
#

I gave an example above of how to use it

wet breach
#

@young knoll better go star that repo

earnest forum
young knoll
#

On it

wet breach
#

XD

quaint mantle
earnest forum
#

only use task if your cancelling from outside of the runnable

vagrant stratus
dawn hazel
#

damn that was a huge shitshow

earnest forum
#

anyone know of a particle that doesnt have gravity

#

thats white-ish

waxen plinth
#

You can use white block particles

#

Block dust

wet breach
waxen plinth
#

It can be made any color

young knoll
earnest forum
#

redstone dust?

young knoll
waxen plinth
#

No

#

I mean yes it's the redstone dust particle

#

But it's called block dust

wet breach
#

besides, MD should be around somewhere too don't think he went to bed yet

earnest forum
#

dustoptions right

dawn hazel
#

good thing i had some popcorn

earnest forum
#

ive done this before

wet breach
#

or should be getting up?

young knoll
#

Getting up yeah

waxen plinth
#

DST in 35 minutes

young knoll
#

Wait

waxen plinth
#

I tried setting a reminder for 2:30AM and it set it for 3:30AM instead

#

I guess that answers my question about how computers would treat it

young knoll
#

It’s 5:25 pm in Melbourne?

vocal cloud
#

MD busy hitting someone over the head for using NMS to set a player's health value

wet breach
#

o.O

waxen plinth
#

Melbourne?

#

Isn't that in australia

young knoll
#

Ye

wet breach
#

I guess it is

young knoll
#

I thought it was like 5am there now

wet breach
#

interesting

waxen plinth
#

Woooo

young knoll
#

Huh

waxen plinth
#

I know a geology fact

young knoll
#

Apparently I can’t timezone

wet breach
#

geography more accurately

waxen plinth
#

Are you in the US

#

Oh yeah lol

#

Geology very different

young knoll
#

Canada

waxen plinth
#

Australia is on the other side of the world

#

It's gotta be more than just a few hours off

young knoll
#

Oh true it’s 1:30am

#

Heh... I knew that

earnest forum
#

its a bunch of other colors