#help-development

1 messages · Page 1640 of 1

silver shuttle
#

thank you so much

tall dragon
#

@regal moat i think you can do .remove()

#

since its an entity

eternal oxide
#

Why are you using nms entities?

regal moat
eternal oxide
#

What is teh gravity gun?

silver shuttle
#

A gravity gun is a type of device in video games, particularly first-person shooters using physics engines, whereby players can directly manipulate objects in the world, often allowing them to be used as projectiles against hostile characters. The concept was popularized by the gravity gun found in Valve's Half-Life 2, as well as the Temporal Up...

eternal oxide
#

ok, so still why use nms?

regal moat
#

im using packets

eternal oxide
#

throwing blocks is simple. you don;t need nms nor packets

regal moat
#

No

#

when you pick the blocks

#

i need to teleport them

#

i can also throw them

#

but the old nms falling block

#

stays

#

and i need a way to kill it

eternal oxide
#

do you mean you want to be able to pick up a block using one click and throw it using another?

wary harness
#

hey any one know simple way to generate player file from uuid

wary harness
#

of player which never played on server

regal moat
#

when you throw it

#

another block is spawned

#

and the old one doesnt get killed

#

for some reason

eternal oxide
#

throwing is simple. I did this the other day to throw blocks```java
@EventHandler
public void onLeftClickAir(PlayerInteractEvent event) {

    if (event.getHand() != EquipmentSlot.HAND
            || event.getAction() != Action.LEFT_CLICK_AIR
            || event.getItem() == null
            || !event.getItem().getType().isBlock()) return;
    
    Player player = event.getPlayer();
    Location loc = player.getLocation();
    Vector direction = loc.getDirection();
    Material item = event.getItem().getType();

    FallingBlock entity = player.getWorld().spawnFallingBlock(loc.add(direction), Bukkit.createBlockData(item));
    entity.setVelocity(direction.multiply(2));
}```
#

that allows you to throw a block you have in your hand

#

no nms

regal moat
#

i can throw the fucking block

#

but i need to kill the nms falling block

eternal oxide
#

dude, so what can;t you do without nms?

#

why are you using nms, again

regal moat
eternal oxide
#

never dive to nms if it can be done using the API

silver shuttle
#

Can you cancel the PlayerChangeArmorEvent somehow? Like if they click with a specific item on their helmet slot, then that click doesnt even properly register and the armor reverts + they still have the old item on their cursor

regal moat
#

send me a friend request

eternal oxide
#

ok, let me see if I can do the pick up part not using nms or lag

silver shuttle
#

Can you cancel the PlayerChangeArmorEvent somehow? Like if they click with a specific item on their helmet slot, then that click doesnt even properly register and the armor reverts + they still have the old item on their cursor

native nexus
#

That is not an event...

opal juniper
#

not yet at least

#

but yes

#

it has not been released yet

#

RedLib has one iirc but unless you wanna pester md_5 about it it’s gonna be a while

native nexus
#

Pretty sure paper has the event

opal juniper
#

yep

native nexus
#

but we don't support that here :3

#

This is spigot owo

native nexus
#

Nice it doesn't seem like you can cancel it, which makes sense

#

ChangeReason is enough

severe marsh
#

In ProjectileLaunchEvent, how do I get player who triggered the event?

eternal oxide
#

getShooter on the projectile

echo basalt
brazen orbit
#

So i was using VisualBukkit for the first time and i dont understand code so i will ask, how do i make it so when players stay on diamondbloc kthey will get levitation?

echo basalt
#

ehh this isn't really the place for visualbukkit

#

But there are 2 ways you can approach such feat

brazen orbit
#

How?

echo basalt
#

1 - Scheduler

#

2 - PlayerMoveEvent

brazen orbit
#

I want it to work thru worlds

#

i think playermovement is the best way to do it

echo basalt
#

Alright

#

So whenever the player moves

#

Check the block below

#

Is it a diamond block?

brazen orbit
#

Yes

echo basalt
#

If so, apply the levitation effect

brazen orbit
#

yea

opal juniper
echo basalt
#

Setting blocks is possible with the API, however it is very slow to do so

tardy delta
#

uhh can i save an inventory in a InventoryClose event? or are the contents cleared then?

echo basalt
#

They're not

tardy delta
#

well for some reason i cant save an inventory

echo basalt
#

Save the itemstack array inside

tardy delta
#

i did

#
else if (event.getView().getTitle().endsWith("safechest")) {
            CommandSafechest.getMenus().put(player.getUniqueId(), event.getInventory().getContents());
            Utils.message(player, CommandSafechest.getMenus().toString()); // debug
        }
echo basalt
#

Okay

#

Did the debug line get called

tardy delta
#

no

echo basalt
#

Then the issue is with the getTitle check

#

endsdWith is case sensitive keep in mind

eternal oxide
#

don't compare inventory names, use instances

tardy delta
#

yea i did like this

echo basalt
eternal oxide
#

just the inventory is fine

quaint mantle
#

you dont need inventoryholder. a set will do

young knoll
#

A set of what

quaint mantle
#

inventory

#

loaded for players

#

remove on close

young knoll
#

Basically the same idea as using the holder instance

quaint mantle
#

yep

young knoll
#

I wonder which one has faster equals

quaint mantle
#

shouldnt make a difference

#

using the inventoryholder "breaches" the api, said choco

#

as the communtiy frowned upon his response

young knoll
#

Ah right

#

Not holder what was it

#

InventoryView

quaint mantle
#

no he said invholde

young knoll
#

And I said view

quaint mantle
#

.

young knoll
#

I’m saying you can compare using the view

quaint mantle
#

true

#

because if both the inv are same

young knoll
#

Or the inventory instance, not sure it really matters

quaint mantle
#

i think inventory checks for titlr

young knoll
#

I do wonder what .equals on an inventory compares

quaint mantle
#

?stash

undone axleBOT
quaint mantle
#

find it im on phone

ivory sleet
quaint mantle
#

wouldnt be logical

ivory sleet
#

It would

tardy delta
#

it says data.yml but there's only this inside

rigid otter
#

I have a problem that my buildtools doesn't generate source(--generate-source) and javadoc(--generate-docs)

severe marsh
#

How do I display action bar in 1.8?

ivory sleet
unreal quartz
#

btw u cannot serialise uuids,. you must convert them to strings

severe marsh
tardy delta
#

the only file where i have an uuid is this

#

and that worked every time before

unreal quartz
#

because that is a string

young knoll
unreal quartz
#

somewhere you've done set(UUID) and its trying to read that back and failing

tardy delta
#

i did set("homes." + player.getUniqueId)

#

so its a string

hidden delta
#

👀👀

hybrid spoke
#

hellouw everybody

tardy delta
#

heywo

waxen plaza
#

do people prefer saving data to json/xml because it's better then java io or just because they don't understand java io well enough to use it?

eternal oxide
#

json/xml/yaml is just a format

#

with libraries and serialization it makes life easy

quaint mantle
#

speeds wont matter

waxen plaza
#

I used json for some other application and it seemed slow for what I needed it to do.

quaint mantle
#

shouldnt matter. yaml runs more checks

eternal oxide
#

if you wanted it to be fast you shoudl not have chosen json

quaint mantle
#

json is bigger

#

more to read

#

xml is simplistic, in and out

waxen plaza
eternal oxide
#

yaml has the minimum of syntax bloat.

waxen plaza
#

Will it work just as good if I serialize my own custom objects?

eternal oxide
#

xml is next

quaint mantle
#

.ini is fastest

eternal oxide
#

true

eternal oxide
#

yes, just use the Bukkit serialization

quaint mantle
#

removes the :==

waxen plaza
waxen plaza
#

I found it quite good saving data to a database and serialize the data objects

quaint mantle
#

how do I get a block? cause I need to get the noteblock so I can give it custom nbt for when it's placed down

#

getBlockAt

woeful crescent
#

Can anyone tell me why this code

//calculating animation borders
        for(int i = 0; i<borders.length; i++){
            //resolving corners (ymin isn't necessary since it's always equal to xmin)
            int xmin = borders.length - i - 1;
            int xmax = xmin + 4 + i * 2;
            int ymax = xmin + 2 + i * 2;
            int[] border = new int[((xmax - xmin) + (ymax - xmin)) * 2];
            //filling perimeter x and y edges
            int[] xRange = MiscUtils.range(xmin, xmax);
            int[] yRange = MiscUtils.range(xmin, ymax);
            int borderIndex = 0;
            for(int j = 0; j<xRange.length; j++, borderIndex += 2){
                border[borderIndex] = getSlot(xRange[j], xmin);

                Bukkit.broadcastMessage("Adding top x edge slot " + border[borderIndex] + " (" + xRange[j] + ", " + xmin + ") in border " + i);
                border[borderIndex + 1] = getSlot(xRange[j], ymax);
                Bukkit.broadcastMessage("Adding bottom edge x slot " + border[borderIndex + 1] + " (" + xRange[j] + ", " + ymax + ") in border " + i);
            }
            for(int j = 0; j<yRange.length; j++, borderIndex += 2){
                Bukkit.broadcastMessage("Adding top y edge slot " + border[borderIndex] + " (" + xmin + ", " + yRange[j] + ") in border " + i);
                border[borderIndex] = getSlot(xmin, yRange[j]);
                Bukkit.broadcastMessage("Adding bottom edge x slot " + border[borderIndex + 1] + " (" + xmax + ", " + yRange[j] + ") in border " + i);
                border[borderIndex] = getSlot(xmax, yRange[j]);
            }
            borders[i] = border;
        }

doesn't generate borders like this

#

Sorry for the huge message

tardy delta
#

is there a better way to do this?

true perch
#

I'm trying to convert a JSON string into an array, I added some json parsing libraries, but every time I attempt to use them I get errors. I'm just trying to get data like this into a clean array:json {"data": [{ "name": "Test", "desc": "This is just a test.", "extra_info": [{"id": 10000}] }]}(I added white space for readability)
Could anyone help?

quaint mantle
tardy delta
#

well i only have one shop

vast sapphire
#
    @EventHandler
    public void railGun(ProjectileHitEvent event) {
           
        Player player = (Player) event.getEntity().getShooter();
        World world = player.getWorld();
        Entity fireball = world.spawnEntity(player.getLocation(), EntityType.FIREBALL);
        Location arrowLocation = fireball.getLocation();
        fireball.setVelocity(player.getEyeLocation().getDirection());
        if (player.getInventory().getItemInMainHand().equals(rail())) {
             
            fireball.setVelocity(player.getLocation().getDirection().multiply(3));

                world.createExplosion(arrowLocation, 2, false, true);

                Firework f = (Firework) event.getEntity().getWorld().spawn(arrowLocation, Firework.class);
                FireworkMeta fmeta = f.getFireworkMeta();
                fmeta.addEffect(FireworkEffect.builder()
                        .flicker(true)
                        .trail(true)
                        .with(FireworkEffect.Type.BURST)
                        .withColor(Color.RED)
                        .withFade(Color.ORANGE).build());

                f.setFireworkMeta(fmeta);
                f.detonate();
                new BukkitRunnable() {
                    @Override
                    public void run() {

                        f.detonate();
                    }
                }.runTaskLater(new SlimeFun(), 2);

            }
        }``` how do I test for right clicking an item in a projectilehitevent
hollow bluff
#

Why doesn't 1.8.8 show up? I downloaded the build

waxen plaza
quaint mantle
#

Metadata

#

?jd

quaint mantle
#

^

hollow bluff
#

How may I use REDSTONE_LAMP_ON for 1.8.8? It spawns as the off one

quaint mantle
#

i hate spigot

#

or bukkit

#

who made it an enum for block states

#

and that material update should come for 1.18, MaterialBlock MaterialItem

vast sapphire
quaint mantle
#

Google!

#

pdc can work too

#

?pdc

vast sapphire
#

MetaData gets applied to the entity so you can check if the player is owner or something, I don't know how you can check for right clicking though

regal moat
#

whats the difference between PlayerInteractAtEntityEvent and PlayerInteractEntityEvent

quaint mantle
#

read the docs

hollow bluff
#

is it impossible to set it to REDSTONE_LAMP_ON ?

#

cuz whatever I try, it stays off

crude charm
hollow bluff
#

1.8.8

vast sapphire
quaint mantle
#

how can I make a command that gives a noteblock with custom nbt?

sullen dome
#

the fact that they didnt fixed that, makes me kinda mad

lost matrix
lost matrix
vast sapphire
#

I'm not sure how to use MetaData to the entity and check for rightclick

lost matrix
vast sapphire
#

i'll look at the docs to see how to use this

brittle nova
#

How can I set the facing of a block?

plain scroll
#

how can i make a reload config command?

dusk flicker
#

Make a command and just call the reloadConfig method that's in java plugin

brittle nova
tardy delta
quaint mantle
#

Load that face?

brittle nova
brittle nova
brittle nova
chrome beacon
#

oh and uh make sure you get the blockdata from the right block

plain scroll
#

wait why cant i use "this"

#

but i can in the other command....

brittle nova
#

This is my code:
BlockData blockData = b.getBlockData();
BlockFace blockFace = ((Directional)blockData).getFacing();

plain scroll
ivory sleet
#

Because that constructor does not take the type of your main plugin class

plain scroll
#

this is an issue

#

u see how ReloadCommand is graw

#

gray

#

and not blue

#

so i think thats where that error comes from

eternal oxide
#

unused

ivory sleet
#

Wrong import then

#

You’re importing bukkits ReloadCommand

brittle nova
plain scroll
plain scroll
#

oh

ivory sleet
#

org.bukkit.command.defaults.ReloadCommand

plain scroll
ivory sleet
#

In your Duke class YodaFacepalm

plain scroll
#

nope

#

wait

#

its allready there

ivory sleet
#

You import the wrong one still

plain scroll
#

what?

undone axleBOT
ivory sleet
#

?learnjava

eternal oxide
#

Import YOUR ReloadCommand not Bukkits

plain scroll
#

sense*

chrome beacon
brittle nova
#

ok i will try

tardy delta
#

is there a chance that player.setInvulnerable(true) causes a state like between survival and creative where i can break blocks sometimes?

#

i hear the sound of damage but dont get it

quaint mantle
#

it may be better to cancel the damage event, what are you trying to do?

tardy delta
#

i'm in survival and dont get damage and somethimes i can break blocks instantly :/

amber vale
#

Ok so I'm working on a custom enchant plugin, which saves the items enchantments as nbt data. Now idk what would be the best way about going to display the enchants in lore, as I can't seem to get an idea how to only redraw the enchantment portion when an enchantment is added? Since I want items to have the regular old lore, and then the enchantments part?

tardy delta
#

lmao found something

#

is there one DamageCause that comes from a player or are there multiple?

#

i think those two


EntityDamageEvent.DamageCause.ENTITY_ATTACK EntityDamageEvent.DamageCause.ENTITY_SWEEP_ATTACK
quaint mantle
#

why not check if the damager is a player?

tardy delta
#

is see no event.getDamager method

quaint mantle
#

afaik there isnt a damage cause that is limited only to players

sullen dome
quaint mantle
#

check if the event is instanceof EntityDamageByEntityEvent

sullen dome
#

that has a #getDamager

tardy delta
#

good move

#

aha like this

if (event.getEntity() instanceof Player && event.getDamager() instanceof Player) {
            
        }
sullen dome
#

basically

tardy delta
#

i was thinking why i got no damage from lava :/

unique halo
#

how do i disable armor stand collision, because when i teleport the armor stand somewhere like inside a block it gets pushed out

amber vale
#

Ok so I'm working on a custom enchant plugin, which saves the items enchantments as nbt data. Now idk what would be the best way about going to display the enchants in lore, as I can't seem to get an idea how to only redraw the enchantment portion when an enchantment is added? Since I want items to have the regular old lore, and then the enchantments part?

forest shuttle
#

That should disable collisions

brittle nova
#

when I change the facing of a block the block drops itselfs. So when I change the facing of a piston the piston drops. Can I disable that?

unique halo
#

since theres aw ayto make items shiny without adding an enchantment

#

like this

tardy delta
#

does anyone knows the event when a player regains health?

sullen dome
#

PlayerRegainHealthEvent? lol

tardy delta
sullen dome
#

entityregain...?

#

it was smt with regain

amber vale
# unique halo r u saying you want the shiny effect?

No I mean i don't know how to keep the original lore, while changing the enchantment lore? For example you have an item with the role
"This is an epic item"
Now when I add an enchantment to it it adds to the lore like this
"This is an epic item
Imaginary enchantment II"
But lets say the player changes that enchantment by leveling it up to level 3. Now I want to remove the imaginary enchantment, while keeping the original lore

#

but idk how xp

sullen dome
#

where do you host it

#

on your pc, or a specific paid host?

tardy delta
#

oh found

sullen dome
tardy delta
#

EntityRegainHealthEvent

sullen dome
#

hah

tardy delta
#

stupid entity

sullen dome
#

i knew it 🦆

forest shuttle
amber vale
#

You arent understanding

#

I have the enchantment data as an nbt

#

Which im writing as lore

tardy delta
amber vale
#

But idk how to ONLY remove the enchantment lore while keeping the original lore

unique halo
sullen dome
#

i knew it was smt with regain

sullen dome
#

and now stop making me sad :(

tardy delta
#

😳 🥰

sullen dome
#

wait

#

localhost

forest shuttle
#

Regex.replace on the lore then?

sullen dome
#

or 127.0.0.1:25565, doesn't matter

#

what client version do you use?

#

and what server version

#

both? looks like one of the both is lower

tardy delta
#

anyways i want to send continously an actionbar to all players with their health, so in the playerregain event and player damage etc should i send a new actionbar or change the text of the existing one? (they get one on playerjoin)

tardy delta
#

it has a runnable

#

hmmm maybe i did it stange gimme second

sullen dome
#

why is there a need for the RegainHealthEvent and damageEvent then?

tardy delta
#

true

#

did my runnable wrong possibly

sullen dome
#

wait a sec

tardy delta
#

just send the health continously no?

sullen dome
#

gimme one seeeeccc

tardy delta
#

doing it right now


@Override
    public void run() {
        Utils.sendActionBar(player, "§c" + player.getHealth() * 5 + " / 100");
    }
sullen dome
#

do something liek this:

    @Override
    public void onEnable() {
        Bukkit.getScheduler().runTaskTimer(this, () -> 
                Bukkit.getOnlinePlayers().forEach(p -> p.spigot().sendMessage(ChatMessageType.ACTION_BAR,
                new TextComponent("Your text"))), 0L, 20L);
    }```
#

at least thats what i'd do

#

oh you are on 1.8?

tardy delta
#

no?

sullen dome
#

then do my example

#

spigot has a inbuild way for actionbars now

tardy delta
#

in playerjoin
new ActionBar(p).runTaskTimer(plugin, 1, 5);

#

yea thats my Utils.sendActionbar

#
public static void sendActionBar(Player player, String message) {
        player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(message));
    }
sullen dome
#

like in onEnable? there's no need for events

forest shuttle
#

Iirc a loop on getOnlinePlayers may throw an exemption if a player goes offline while is running

sullen dome
#

nope it doesnt

unique halo
sullen dome
#

it doesnt run the task FOR the players

sullen dome
#

the task just executes stuff for all online players... so if no one is online, it just does... nothing

#

and i guess sending it every second should be enough

forest shuttle
#

I'm not on my computer right now but I recall having an exemption like that because the collection was modified while the loop was running.
Maybe It was by another reason though, Im talking just from my memories.

sullen dome
#

it looks like it was something different lol. i don't think that it throws any exceptions lol

#

me when i just create a project to test that one method out rq

#

Afsasdf seems like a cool plugin idea

forest shuttle
#

The new essential plugin

worldly ingot
#

Awesome, Fricken Super Amazing, Software Development Features

#

The new must-have library

lost matrix
sullen dome
#

i finally reached something in my life lol

wary harness
#

any one has solutin to change this ugly prefix

#

[me.mraxetv.beasttokens.sqllib.hikari.HikariDataSource]

#

to my plugin prefix

#

I really don't undarstand

#

why is that not changable

chrome beacon
#

Use another logger

wary harness
#

u can't

tardy delta
wary harness
lost matrix
#

slf4j

wary harness
#

how would I do that

#

so that is hikari

#

class

#

which is grabed by maven and compiled to my plugin

wary harness
#

and private

#

so u can't change it

lost matrix
#

?

#

Do you have the data source?

chrome beacon
#

It's Open Source

#

under the Apache License 2

wary harness
#

can I edit classes there

#

I was modifying it this way

#

but after java 11 this is not working any more

#

so I am stuck

#

and I have no clue is it possible to edit maven repository code

lost matrix
#

HikariCP uses slf4j under the hood. There must be an easy way to define another logger for it.

wary harness
#

it han no method for it

#

I will show u class

chrome beacon
#

Why are you decompiling when it's open source

wary harness
#

that is when u press intellj shift+ left click

chrome beacon
#

Just customize HikariCP and use that

wary harness
#

so what download it and manually install it in repository then

chrome beacon
#

Download the source change it then install that in to your repo

tame fern
#

Is there an Event for when water ticks? Trying to make an erosion plugin.

wary harness
#

I was looking something simple

#

thru reflection

wary harness
#

so I don't need to do it for every new version of hikari

chrome beacon
#

You won't have to redo it for every update

#

Git can handle most of them

brittle nova
#

when I change the facing of a block the block drops itselfs. So when I change the facing of a piston the piston drops. Can I disable that?

shell dove
#

How can i change death messages expire time?
When a player interacts with another player/mob and after certain amount of time if he dies, mob/player will not get kill, and players death will be counted as natural. What is that death expire time and how can i change it with plugin(can i even)?

brittle nova
#

mybe thats the problem

lost matrix
brittle nova
tardy delta
#

:/

#

my health 😌

brittle nova
lost matrix
#

What version?

tardy delta
#

can this output something like 95.4?
DecimalFormat df = new DecimalFormat("#.#");

tame fern
#

Welp, that was about the easiest plugin I've wrote.

lost matrix
tardy delta
#

i just want to limit to 1 digit after the dot

lost matrix
tardy delta
#

o

#

yeah seems long

young knoll
#

You can also use string.format

regal moat
#

how can i check if two entites collided with each other

lost matrix
young knoll
#

Or you would need a repeating task

#

Which is not ideal

lost matrix
#

And then checking every entities BoundingBox every tick? That sounds expensive.

echo basalt
#

bytecode manipulation time

regal moat
#

i dont think

#

i can make overwrite

#

a real players

#

code

#

so

echo basalt
#

player collision

#

...

regal moat
#

a falling block and a player collides

echo basalt
#

can't you just check if the fallingblock is within the distance of 1

regal moat
#

basically

#

i need the falling block damage the entity it hits

#

jesus. i cant explain anything

#

i need the falling block damage the entity it hits
but yeah, this.

young knoll
#

You can do that nativity

#

Use the damage event to customize how much

regal moat
#

i think EntityDamageByEntityEvent

young knoll
#

I imagine that is fired

#

Which allows you to store data on the entity to use for determining the damage

regal moat
#

like this then?

young knoll
#

Should work

#

Keep in mind that will change anvil damage too

regal moat
#

oh yeah

#

so i should check

#

if i its not an anvil

#

or a chipped anvil

#

or a damaged anvil

quaint mantle
#

I tried following a tutorial how to do worldgen but the plugin for it won't generate, anyone how how to fix that?

regal moat
# young knoll Keep in mind that will change anvil damage too
    @EventHandler
    public void onDamage(EntityDamageByEntityEvent e){
        if (e.getDamager().getType() == EntityType.FALLING_BLOCK){
            FallingBlock fallingBlock = (FallingBlock) e.getDamager();
            if (fallingBlock.getBlockData().getMaterial() != Material.ANVIL || fallingBlock.getBlockData().getMaterial() != Material.CHIPPED_ANVIL || fallingBlock.getBlockData().getMaterial() != Material.DAMAGED_ANVIL){
                e.setDamage(8);
            }
        }
    }
#

so this is good?

#

aight imma try

brittle nova
steady sphinx
#

Where can I find spigot api

#

To download

young knoll
#

You want to download the API?

tardy delta
#

?api

#

uh

#

i'm so bad at this 😔

young knoll
#

?stash

undone axleBOT
young knoll
#

I guess?

quaint mantle
#

🤨

true perch
#

how can I add a delay in my code so the server doesn't crash with a large loop?

echo basalt
#

segment the work

#

basically

true perch
echo basalt
#

Let's say you have a loop that does 100k iterations

#

you make it do 1k iterations every tick

chrome beacon
next zinc
#

Anyone know how I can make this shape into a circle as right now its like a weird shape that doesn't resemble a circle.

#
Location loc = player.getLocation();
              int points = 5;
              for (int iteration = 0; iteration < points; iteration++) {
                double angle = 360.0D / points * iteration;
                double nextAngle = 360.0D / points * (iteration + 1);
                angle = Math.toRadians(angle);
                nextAngle = Math.toRadians(nextAngle);
                double x = Math.cos(angle);
                double z = Math.sin(angle);
                double x2 = Math.cos(nextAngle);
                double z2 = Math.sin(nextAngle);
                double deltaX = x2 - x;
                double deltaZ = z2 - z;
                double distance = Math.sqrt((deltaX - x) * (deltaX - x) + (deltaZ - z) * (deltaZ - z));
                for (double d = 0.0D; d < distance - 0.1D; d += 0.1D) {
                  loc.add(x + deltaX * d, 0.0D, z + deltaZ * d);
                  player.getWorld().spawnParticle(Particle.DRIP_WATER, loc, 50);
                  loc.subtract(x + deltaX * d, 0.0D, z + deltaZ * d);
              }
        }
regal moat
#

What makes custom events fire?

#

I am making a custom event

quaint mantle
#

?eventapi

undone axleBOT
unreal tartan
chrome beacon
#

Something modified the world async

quaint mantle
#

redirected him to support disc

regal moat
#

how can i get where a falling block landed?

young knoll
#

EntityChangeBlockEvent

regal moat
#

i need to get it inside another event though

#

wait i know

brittle nova
chrome beacon
#

You sure that's not one of your plugins

waxen plaza
quaint mantle
#

how do I make a command give me a noteblock with custom blockstate?

tame coral
#

Is there a way to have ChunkGenerators from different versions of minecraft ? I wanna have a world with 1.17 generation and one with 1.16, is it possible ?

chrome beacon
#

You would have to port the ChunkGenerator yourself

tame coral
#

Like create it manually with all the generateNoise and all ?

vital ridge
#

Is one of mixins usages to pretty much add new stuff to methods?

quaint mantle
#

for noteblock its not possible since its for blocks

chrome beacon
#

You will have to use NMS for custom blockstate (by which I assume what note it is on)

vague cypress
#

So, I'm trying to make a command with a start and end function to it(ex. /tag start, /tag end). When I use this:

                        plugin.tag.tagged(plugin.tag.pickFirstIt());

                    }
                    else if (args[0].equalsIgnoreCase("end")) {
                        plugin.tag.end();

                    } else {
                        player.sendMessage(ChatColor.ITALIC + "" + ChatColor.RED + "Incorrect!" + ChatColor.WHITE + " Try /tag <start/end>");

                    }

        }
        sender.sendMessage(ChatColor.WHITE + "You can" + ChatColor.ITALIC + "" + ChatColor.RED + " NOT" + ChatColor.WHITE + " use that command!");```

It tells me that the command doesn't exist, but when I type in `/t` it gives me the option to autocorrect to the command...

Also, when I do `/plugins` it tells me there aren't any plugins...

Can anyone help?
quaint mantle
tame coral
#

NMS stands for net.minecraft.server

#

there are quite a lot of tutorials to work with it

vague cypress
chrome beacon
#

Should be one

#

Check the top of the log or paste the entire one

#

?paste

undone axleBOT
vague cypress
#

I might be looking in the wrong place, where would I find that?

chrome beacon
#

latest.log is found in the logs folder

spark zealot
#

I'm trying to send some inventory information on the client side only, what event should I be looking at?

cinder timber
#

client.getInventory(player).show().continue()

hollow bluff
#

How to turn a redstone lamp on if REDSTONE_LAMP_ON doesnt work?

narrow vessel
#

redstone block

hollow bluff
#

I mean.. it should be possible to do without?

ivory sleet
tacit drift
#

ChatColor.stripColor just removes color codes? :))

#

and does it remove & also if it's the case?

sleek pond
#

Does player switched world event get called if a player joins the server?

spark zealot
proud basin
#

if I print a entitys name will it print out it's custom name or default name

quaint mantle
#

you guess

proud basin
#

wow thanks

cinder timber
abstract surge
#

Hello i have a question how can i chance the blockbreak speed in 1.16.5
any ideas?

cinder timber
#

maybe

abstract surge
#

and how

unreal quartz
#

pretty sure an api method was added by choco for that

abstract surge
#

thx i will test that

spark zealot
#

what are some cases when you would have to use net minecraft server

spark zealot
#

I'm trying to modify NBT data of some items of players ONLY on the client side

#

Do you know if that's included in the API?

#

I'll look into NMS then

#

Because I've been killing myself over the docs

#

?

unreal quartz
#

nah ur gonna have to fuck with outgoing packets

spark zealot
#

that's what I've been thinking

spark zealot
#

Is there an outbound packet event?

#

e.g. strip all shulker box data

#

or make it so that all players render having an enchantment effect on armor/items

#

I can do it via packets ez

unreal quartz
minor garnet
#

PacketPlayOutEntityQuipment u send it only for player

spark zealot
#

equipment is just inventory no?

unreal quartz
spark zealot
#

Yeah I can do the packet stuff no problem

#

Do you have a link for modifying NMS?

#

wonderful

#

thank y ou

quaint mantle
#

how would i add a tab complete to a command thats being done via commandpreprocess?

waxen plaza
#

?paste

undone axleBOT
waxen plaza
silver shuttle
#

How do I implement a custom format from a config string into CustomDateFormat?

abstract surge
#

with system currentmillis?

#

Date date = new Date(Premium.getLong(your config millis));
String mm_dd_yyyy = (new SimpleDateFormat("dd.MM.yyyy")).format(date);
String hour_min = (new SimpleDateFormat("HH:mm")).format(date);

#

did you mean this?

waxen plaza
#

How can I make particles despawn faster?

unreal quartz
#

you don;t

#

once its spawned its all the client from then on

silver shuttle
waxen plaza
#

can I move them?

unreal quartz
#

well you can spawn it again somewhere else

silver shuttle
unreal quartz
#

just replace the string with whatever the user wrote in the config then

silver shuttle
#

Config:

date-format: "yyyy MM dd HH:mm:ss z"

Code:

public static SimpleDateFormat dateformatter;
dateformatter = new SimpleDateFormat(config.getString("date-format"));
dateformatter.setTimeZone(timeZone);
String date = dateformatter.format(unix * 1000L);

With this code, the format of the displayed date should change, but it doesn't, displaying yyyy-MM-dd HH:mm:ss z
What do I need to change?

waxen plaza
unreal quartz
#

yeah but the previous particle won't clear

#

the server can't tell the client to forget about a particle

waxen plaza
#

oh I see

#

well that sucks

unreal quartz
#

you'll have to pick a short particle

waxen plaza
#

ok

next zinc
#

Thanks :)

unreal quartz
#

don't see anything wrong with ur code

abstract surge
#

maybe load the config before?

silver shuttle
#

it doesnt do anything tho

unreal quartz
#

that'snot very descriptive

silver shuttle
#

it is loaded, all other messages work fine

silver shuttle
abstract surge
#

maybe put the dots between yyyy.MM.dd

silver shuttle
#

shouldnt be doing anything as the function only replaces yyyy etc

median anvil
#

anyone know how to extend the world generator to add some custom generation/prevent some generation. such as prevent certain blocks from spawning and spawn other?

unreal quartz
#

i suppose try logging the format returned by the config call then

unreal quartz
median anvil
#

i've been trying, but all i've found was just grabbing each chunk before it is loaded and editing it from there, and that is lagging my server horribly

silver shuttle
#

well it is resource intense

#

just like any other custom world engine plugin

median anvil
#

if i can edit the generation directly it wouldnt be laggy, cause rn its building each block and then grabbing each block again

#

its basically generating a chunk twice before loading it rn

hazy igloo
unreal quartz
#

your module structure is very confusing

#

is ClanSystem-API supposed to provide an abstract version of the plugin or something

#

because you have server-specific bindings in that moudle

ivory sleet
#

Use more explanatory variables
Don’t mix command and query methods, as mentioned before functions should only do one thing

#

(We can also talk about that every line in a function should be the same level of abstraction but probably going overkill here)

unreal quartz
#

Enterprise™️ClanSystem

ivory sleet
#

😌

native nexus
#

Having no return in those if statements is making me nervous for the ClanCommand class.

#

I know it is fine but hmm

ivory sleet
#

Myes that function is like the horizon of Madagascar or something

#

And no it’s not fine

#

I will find you if you write long functions that do more than one thing

#

It’s fine when we write the code

#

But we shouldn’t leave it in such state

#

So once we get that code to work, simply put some effort to clean it (:

native nexus
#

I would do dependency injection for the PluginManager

ivory sleet
#

Myes that’s a good choice probably

native nexus
#

Myes :3

ivory sleet
#

:3

native nexus
#

So many private function calls, also a big nein

ivory sleet
#

Why not?

#

Well internal functions are cool

native nexus
#

Yeah but it isn't utilised more than once?

unreal quartz
#

what's the opposite of Myes

ivory sleet
#

That might not be the point of it

native nexus
#

Why create a function that you only use once

unreal quartz
#

Mno doesn't have that ring to it

ivory sleet
#

Readability

#

It’s polite to the reader

#

killConclure() reads better than KillManager.getInstance().getKillable("Conclure").execute()

#

And no you won’t drown in a pool of private functions

#

Because you will name those functions and put them in appropriate classes and packages and so on

native nexus
#

I guess it is just personal preference.

ivory sleet
#

You’ll end up with this nice semantic hierarchy of functions

native nexus
#

The functionality inside the scope is the same for all of them.

ivory sleet
#

That’s not the point

#

It provides the reader what’s happening in a function at high level detail

#

And subsequently the reader can exit early

narrow furnace
#

Its just better programming

spark zealot
#

maven index for protocollib is giving me an error

#

why are things like this

eternal pecan
#

I have a quick question that I can't seem to find the answer to in the docs or on the forums

#

how can I determine if a player was killed by an entity that is NOT a player in the PlayerDeathEvent event

#

I can see if they were killed by a player using getKiller() but how can I determine if a mob killed them

#

trying to only run my code if they died to mobs

#

I see that there's getLastDamageCause() but how can I be sure I get every mob with that?

crude charm
#

then get killer

unreal quartz
#

instance of EntittDamgeByEntityEvemt

crude charm
#

and instance of Monstor

eternal pecan
#

doesn't getKiller only work if it's a player?

unreal quartz
#

killer returns only player

crude charm
#

oh

unreal quartz
eternal pecan
#

sorry if that's a stupid question, first plugin

unreal quartz
#

well it’s the last damage cause

quaint mantle
#

Guys is there anyway a player sees a different time than another. Like in my screen it is sunny but in another players screen it is night.

quaint mantle
#

thank you >)

unreal quartz
#

that method has existed for years

crude charm
#

What ver was it introduced?

#

I swear I looked for it

#

and couldn't find it

crude charm
#

@unreal quartz

unreal quartz
crude charm
#

What ver is 2011

unreal quartz
#

literally a decade

crude charm
#

1s

#

oh it released in 2011

#

wow

unreal quartz
#

it was one of the first methods added to bukkit

crude charm
#

LMFAO

#

I should delete all the ugly nms

#

haha

#

Mb just too many player methods, I skipped over it

torn shuttle
#

if you use a world#spawn method and store a reference to the living entity you're spawning, but then that spawn gets cancelled, does the #isDead() method return true for the living entity?

unreal quartz
#

i don’t think so

ivory sleet
#

Probably not

torn shuttle
#

ok how can you tell if a living entity went through the spawn event successfully ?

#

because isValid is doing some weird shit as of 1.17

unreal quartz
#

does world have a getentity(uuid) method? because you can try that after

quaint mantle
#

ping!

unreal quartz
#

why would it be a loop

quaint mantle
#

thats literally what getentity would do

unreal quartz
#

you’re testing if the world contains an entity from a uuid

#

if a plugin cancels the spawn event, the test will be false

quaint mantle
torn shuttle
#

is there no field in the living entity that would indicate that it is... valid... but also isn't the currently somewhat broken isValid method

ivory sleet
#

Thought it worked absolutely fine

quaint mantle
#

?stash

undone axleBOT
ivory sleet
#

maybe use isAlive

#

if that’s a method

torn shuttle
#

me too until I realized that on world load every single entity that spawns in a chunk load is convinced it's not valid

ivory sleet
#

Oof

torn shuttle
#

well not every single entity, actually it was much worse because it wasn't quite that linear

#

there's something weird about 1.17 chunk vs entity loading I swear

ivory sleet
#

Haven’t tried so can’t tell but yeah what lmbi said might not be a bad approeaxh

torn shuttle
#

I sort of wanted to avoid querying the world for performance reasons if I could avoid it

#

hm

#

I'll do some further tests for now, thanks for the help

ivory sleet
#

Cheers

median anvil
#

anyone know how to remove biomes from spawning in a world?

median anvil
#

nvm

sullen marlin
#

search for spectator and see

native nexus
#

Nice nice!

#

There is indeed a spectate cause

quaint mantle
#

"java.lang.reflect.InaccessibleObjectException: Unable to make boolean java.beans.FeatureDescriptor.isTransient() accessible: module java.desktop does not "opens java.beans" to unnamed module "
what is this error

#

just raise in this save expression

lavish hemlock
#

Well, it looks like someone's trying to reflect a class from java.beans but the module system is prohibiting it as java.desktop doesn't open it for reflective access.
"unnamed module" probably means that the module performing the reflective operation either doesn't have a module descriptor or is from a pre-Java 9 version.

#

Looks like the issue is with snakeyaml.

quaint mantle
lavish hemlock
#

Give me a second, just found a Bitbucket issue related to this.

#

snakeyaml might be outdated with (your version of) Spigot 1.12.2 actually.

quaint mantle
#

/gamerule spectatorsGenerateChunks false

young knoll
#

Yeah spigot 1.12 doesn’t support modern java

lavish hemlock
#

A'ight then, so, xogh, you're probably going to need to downgrade your server's Java version.

quaint mantle
#

i think you can do that only with NMS

lavish hemlock
#

As stated previously.

young knoll
#

That’s probably into the territory of modifying the spigot jar

#

What’s the use case

quaint mantle
#

how do we do player ranks? like having icons in-front of player names in chat and in tab

lost matrix
granite beacon
#

does canceling EntityToggleSwimEvent make the player swim more slowly? Visually it looks the same
(please reply or @)

quaint mantle
lost matrix
#

To alter the font and add icons

scenic abyss
#

can anyone help me increase the chanches of happening?

#

it should be 5% now

#

i need like 50%

quaint mantle
lost matrix
lost matrix
quaint mantle
quaint mantle
lost matrix
# quaint mantle it's just the part of adding it to the name I have no idea about

One example:

      @EventHandler
      public void onJoin(final PlayerJoinEvent event) {
        final Player player = event.getPlayer();
        final String playerName = player.getName();
        final char customChar = TextureModel.KILL_QUEST_ICON.getChar();
        final String listName = "§f" + customChar + " §e" + playerName + " §f" + customChar;
        player.setPlayerListName(listName);
      }

Which results in:

#

But you need to use your own custom char for that.

quaint mantle
lost matrix
#

This is only for the tab list.
You usually dont want to autocomplete or select custom names but the players actual name.
You should toy around with methods like Player#setCustomName(String) and Player#setName(String)

quaint mantle
#

hm

regal moat
#

is there a packet for making entities glow? i tried #setGlowingTag()

#

not workin

opal juniper
#

there is and i imagine that you should probably just google it as there are likely a million examples

hardy swan
#

need help

#

any easy/non-regex ways to get list/array from a yaml config like this:

arr: [1, 2, 3]
vague oracle
regal moat
quaint mantle
#

If you can use snakeyaml use it - it Supports getList iirc

summer scroll
#

So I have like a weird issue, this issue is sometimes happens and sometimes not, basically the issue is when player go in the water, armor stand that rides them will dismount automatically, and I won't that to happen (client side armor stand)

smoky finch
quaint mantle
#

nvm you cant cancel that event I think

#

or just on dismount mount them?

summer scroll
quaint mantle
#

how is the entity client side? 🤔

chrome beacon
#

It's created with packets

dreamy scarab
fleet cosmos
#

hello , am trying to get the group of a player
with this :

public static boolean isPlayerInGroup(Player player, String group) {
    return player.hasPermission("group." + group);
}

but since op players have all perms it will always return true if the player is op

#

how Can I get the group of an op player?

ivory sleet
#

Op doesn’t possess a group

fleet cosmos
#

OK then let's say in a server there is admin group and owner group and both of their members are op'ed
how can I check if that player is an admin or an owner ?

left lodge
#

ops will always have the permission group.<string here>

ivory sleet
#

^

fleet cosmos
#

that's what am saying

left lodge
#

i'm pretty sure there is a way to do it by hooking into the luckperms api, assuming you're using luckperms

fleet cosmos
#

I am

left lodge
#

probs a question for the luckperms discord then

fleet cosmos
#

kk

#

ty anyways ^^

quaint mantle
#

LP heavily discourages OP anyways

languid geode
#

Something is going terribly wrong with my intellji when i import the spigot project my IDE refuses to import the dependencies or plugins causing massive errors inside the IDE however maven is able to compile

#

Pog my IDE wont even recognize files within the same project

#

Time to conceed and invalidate and reboot 😦

dreamy scarab
#

soo I am getting this Error
and Idk why
can any1 tell how can I fix it?

#

:evo_shin:

#

Why no files are allowed :V

young knoll
#

Verify

#

Or

#

?paste

undone axleBOT
dreamy scarab
#

👌

tardy delta
#

instead of saving all slots of an inventory to a file shouldnt i just save the ones thats arent empty?

opal juniper
#

myeah

#

probably save it as a map

#

ie <Integer, ItemStack>

#

where is it slot number to the item

#

obviously you would need to deserialise

tardy delta
#

yea

quaint mantle
opal juniper
#

well

#

it depends

#

if they want to keep the slot of the items

#

then a map would be needed

quaint mantle
#

Still an array

opal juniper
#

no

#

what i mean is

#

there way be empty ones in between

quaint mantle
#

You’re saying an array won’t let you know the slot?

#

Why do the null ones matter?

#

If (stack != null$

opal juniper
#

map is more expensive

quaint mantle
#

Quicker especially for something that is index based like inventories. Cleaner and more proper imo

opal juniper
#

but i thought - for their usecase - it would be necessary

quaint mantle
#

I still say array def for something like this

#

Same shit man

#

Just forked spigot

#

Still spigot

unreal quartz
#

not spigot

#

no

quaint mantle
#

I assume people would use paper in 2021

unreal quartz
#

no friendhsips allowed

tardy delta
#

i had it already like this

#

@quaint mantle

unreal quartz
tardy delta
#

🎉

#

i like it

late stone
#

How do I make a mob not pushable and not moveable?

quaint mantle
narrow furnace
#

thats onedark

unreal quartz
#

and it looks awful 🙂

narrow furnace
#

false

#

incorrect

#

best colour scheme

#

second only to nord

quaint mantle
narrow furnace
#

gruvbox probably

#

the guys colourblind

unreal quartz
#

the default

narrow furnace
#

LOL

#

worse

unreal quartz
#

it's literally perfect

#

no need to change it

#

or install some dogshit theme

narrow furnace
#

its aids

#

what do u use in other editors

unreal quartz
#

in vscode i also use the default

young knoll
#

Imagine having a pointless argument about themes in a help chat

unreal quartz
#

i don't see any arguing happening here

narrow furnace
languid geode
#

Imagine not being verified and talking shit

tardy delta
languid geode
#

UUID of players are always static if they would be not id be concerned

tardy delta
#

but i mean

languid geode
#

UUID = Unique User ID

tardy delta
#

its in a command

languid geode
#

:what:!

narrow furnace
#

static != final

languid geode
#

^

tardy delta
#

?

languid geode
#

Have you ever programmed in java before?

#

!java

#

?java

undone axleBOT
languid geode
#

Stupid bot 😦

tardy delta
#

???

summer scroll
#

What are you trying to achieve?

languid geode
#

:derp:

quaint mantle
tardy delta
#

oh wew just ItemSTack is better btw the key is the slot

languid geode
#

Static as in they cant change

#

their not allowed to

narrow furnace
#

static != final

tardy delta
#

i could store a map in a map but that goes brrr

summer scroll
#

Table

narrow furnace
#

final means it cant change

quaint mantle
#

Just make an itemstack array man.

tardy delta
#

figuring out other way

summer scroll
#

It's not?

narrow furnace
#

static means you dont have to call it on instance of that class

summer scroll
#

Just use Table, instead having a map inside a map.

tardy delta
#

hmm never used it lemme see

quaint mantle
#

I’m confused where the players needed and for what.

#

That’s public sysdm

summer scroll
#

I'm guessing he want to store player's inventory contents.

tardy delta
#

well its a kind of private vault

#

which stores the contents

unreal quartz
#

not if it is private

quaint mantle
#

a map<Player, Itemstack[]>

#

Should be fine

unreal quartz
#

static = belonging to a class rather than the instance

narrow furnace
#

how do people not know this

tardy delta
#

but then i cant get to which slot that item refers and cant check if the item is air

narrow furnace
#

but they are helping people with it

summer scroll
tardy delta
#

thats the point

languid geode
#

I phrased it wrong i meant that the UUID is cannot be changed

#

I thought he wanted to modify the UUID

tardy delta
#

no

quaint mantle
narrow furnace
#

@tardy delta sorry what are you trying to do

#

and do you still need help

summer scroll
quaint mantle
#

What bro?

tardy delta
#

i'm making a private vault for players to store there stuff

#

i save the items in a file

quaint mantle
#

Arrays are index based?

unreal quartz
tardy delta
#

but dont want the empty ones

quaint mantle
#

What do you think inventory contents are

#

An array of items racks

summer scroll
#

i mean i know but i haven't do anything with that

unreal quartz
#

huh?

tardy delta
#

so i thought lets make a map with integer and the itemstack and check if that item is null or air

narrow furnace
#

could you not use an inventory?

tardy delta
#

do you understand?

quaint mantle
#

Then why talk against what I say lol?

unreal quartz
#

arrays are programming 101 in any language

narrow furnace
#

yes i think i do

summer scroll
#

i didnt know that the array is the slot, i thought it's skipping the null/air items

#

i mean index

quaint mantle
#

If you don’t set it then it’ll be bull

unreal quartz
#

well now you know

tardy delta
#

annd i dont want null in my files

unreal quartz
#

why not

quaint mantle
#

That won’t matter

#

You can do

unreal quartz
#

how else will you represent a missing item

narrow furnace
#

what kind of file is it

quaint mantle
#

If (stacks[i] != null)

tardy delta
#

i want to save like 1: leather

quaint mantle
#

That simply

unreal quartz
narrow furnace
#

so just plain text?

tardy delta
#

something like that

unreal quartz
#

itemstack is serializable, you can just write the array and it wilk be handled for you

tardy delta
#

i had it like this and the nulls go brr

unreal quartz
#

will a user be looking at this file?

tardy delta
#

no

unreal quartz
#

you seem to be trying to solve a non-issue

quaint mantle
#

He’s just trying to fix his design I understand

summer scroll
#

serialize the inventory would be very pog right

#

to base64

unreal quartz
#

i don't really understand why you want to go write your own method to save the contents when you can just use the one which is literally built in and done for you

quaint mantle
#

You can yea base 64 for saving it to databases

unreal quartz
#

if you really want to you can set each key and value manually, but why go through the hassle to save a few nulls?

tardy delta
#

i have something like this

for (Map.Entry<Integer, ItemStack> entry : inventories.entrySet()) {
            if (inv.getItem(entry.getKey()) != null && inv.getItem(entry.getKey()).getType() != Material.AIR) {
                ConfigManager.getDataConfig().set("safe_chests" + p.getUniqueId(), entry.getValue());
            }
        }
fluid cypress
#

is there any way to do something that can throw an exception, without the ide telling me to use try/catch? i mean, the editor doesnt tell me to use try/catch whenever i use an object that can be null and that can produce null pointer exception, or something like that

unreal quartz
#

runtime exceptions are unchecked

#

wrap whatever it is inside a runtime exception and it won't throw a compile time error

#

of course you sohuld probably document what it will throw and when

fluid cypress
#

how do i wrap

#

my exception

#

nvm i just did it

unreal quartz
#

if its your own then you can subclass RuntimeException, or just throw a new RuntimeException instead

fluid cypress
#

yea, its my own exception

#

what about assert? does that kill the server or something

#

should i use it besides for just testing

sand rune
#

Guys I'm made a custom rank sys and i want to show the Owner rank on the top of tab list
( I don't use luckperms)

fluid cypress
#

and debugging

unreal quartz
#

assert is useless if a specific flag is not set, which in production environments it is not

#

your program will be stopped if the assertion is false

fluid cypress
#

so its not just one more exception, it will kill the server

quaint mantle
#

Or teams

sand rune
#

I'm using Teams Scoreboard

#

So how to make it ?

unreal quartz
sand rune
#

Can any one answer me ?

unreal quartz
sand rune
#

Guys ?

unreal quartz
#

pretty sure its sorted by team score

tardy delta
#

maybe i could save in some sort of database

unreal quartz
#

your question has been asked 100 times on spigot before and i can guarantee some googling will get you the answer

quaint mantle
sand rune
#

Okay @unreal quartz

sand rune
#

I googled it and didn't find it @unreal quartz

unreal quartz