#help-development

1 messages · Page 1554 of 1

quaint mantle
#

F

opal juniper
#

PulseBeat You Imbecile!

#

lmao

#

every build has failed

jade perch
#

If all else fails just clone and publish it to local

opal juniper
#

^

jade perch
#

Pretty sure that can be avoided

ivory sleet
#

Idk haven’t given it a shot but you could maybe force compile or something if IntelliJ allows that

opal juniper
#

idk how gradle works

#

and i use maven so

ivory sleet
#

It’s maven but on steroids

jade perch
#

I mean, you don't need to really do anything

#

you just press the publishtolocal thing in intelllij

#

and feed it the spigot jars if it asks

opal juniper
#

can i publish to maven local tho

#

that would be cool

jade perch
#

That's what gradle does

opal juniper
#

oh

#

cool

#

as i said - never used it

jade perch
#

gradle is basically maven just in a different programming language

opal juniper
#

ohhhhh

#

kotlin?

jade perch
#

You can use kotlin

#

it's groovy by default

opal juniper
#

such a stoopid name

vague mason
#

is this good?

#

like it will cancel the whole event

#

if sign is detected

opal juniper
#

yhuh

jade perch
#

don't really know what you're asking

#

but it looks fine

opal juniper
jade perch
#

See you in 2 hours

opal juniper
#

is there a script anyone has to automate it?

quaint mantle
jade perch
opal juniper
#

im gonna download all to local

#

so

#

im on windows

jade perch
#
repositories{
    maven{ url = "https://repo.codemc.io/repository/nms/" }
}
opal juniper
#

ok

jade perch
#

oh wait nvm

#

he uses kotlin for it

opal juniper
#

i just changed the syntax

#

its fine

jade perch
#

kk

opal juniper
#

its seems to be working as well

#

thanks a tonne

jade perch
#

np

opal juniper
#

saved me a lot of time 🤣

#

Imma just let this chug away

rotund pond
#

Hello !

I'm wondering something: I try to create a player skull a Player but they ask me an OfflinePlayer ...
The player skull's owner is online everytime, so should I do an OfflinePlayer to match ?
Maybe is there an other way to do ? 🤔

jade perch
#

the player interface extends offlineplayer

#

so you can just pass in the player

opal juniper
rotund pond
#

Ahh !
Didn't look at this, ty ^^

opal juniper
#

which one

quaint mantle
#

what is sound for beetroot plant breaking?

jade perch
opal juniper
jade perch
#

Only other thing I can think of is just getting rid of one of the outputs

#

I'll look at the gradle real quick one sec

opal juniper
#

ok

jade perch
#

Can't see off rip

#

that's the file that is giving you issues though maybe you can do some googlefu or wait for pulsebeat to wakeup so you can yell at him

opal juniper
#

Hmm yeah

#

i dont really know what to change

#

i will have a look

#

thanks

arctic jetty
#

what would be the best way to wait for a world to load? my plugin is on POSTWORLD, but since i'm using multiverse some worlds won't be loaded when the plugin starts running

right now i'm waiting 30 seconds(🤮) in onEnable so that worlds load in properly but that is pretty unreliable and i'm sure there's a better way

stone sinew
#

I could be wrong but isn't there a world load event?

opal juniper
#

You are correct

arctic jetty
#

i'll check that out, thanks

stone sinew
#

👍

quaint mantle
#

Hi Uhh im having a problem with my multiverse core. I want to teleport a random player who touches in the button to another world, but the @p command doesn't work. Can u help me

vague mason
#
            for(ItemStack item : player.getInventory().getContents()){
                //if(item.getType() == material) continue;
                hasAmount += item.getAmount();
            }
#

Why this returns null?

dusty herald
vague mason
#

I also did if(item == null) but IDE said that item will never be null

dusty herald
#

check if the type equals Material.AIR

vague mason
#

Yes if returns null when it comes to AIR

dusty herald
#

yes

#

so make sure it's not air

vague mason
#

but I even can't use item because it will auto gives me an error

#

like I can't do if(item == null)

dusty herald
#

item itself isn't null, but trying to get the amount of air throws an NPE

vague mason
#

your are smart

dusty herald
#

or getting the data too ig?? idk

#

i don't fuck with air 😂

#

omg i have ur ip now

#

exposed

vague mason
#

my IP is 193.77.80.107

dusty herald
#

getContents returns items in the armor slots and offhand

vague mason
#

thanks

#

Still error

dusty herald
#

what code are u using

vague mason
#
if(item.getType().isAir()) continue;
#

then getType() is null?

#
            int hasAmount = 0;
            for(ItemStack item : player.getInventory().getStorageContents()){
                if(item.getType().isAir()) continue;
                if(item.getType() == material) continue;
                hasAmount += item.getAmount();
            }
dusty herald
#

yeah I have null checks in my IDE and no issues with it saying it can't be null

vague mason
dusty herald
#
           for (ItemStack item : sellGUI.getInventory().getStorageContents()) {
            if (item == null) {
                continue;
            }
            if (item.getType() == Material.AIR) {
                continue;
            }
            if (isIllegalItem(player, item)) {
                continue;
            }```
dusty herald
#

but the item can

vague mason
#

Item can't be null too

dusty herald
#

ur ide is on something man idk what tho

#

try running it with it still on there and if it works just add an exception for that line

vague mason
#

Also I'm using Minecraft 1.15

#

for my plugin

#

spigot 1.15

#

testing on 1.16.5

dusty herald
#

im using 1.16 API

vague mason
#

maybe 1.15 has NotNull in item

dusty herald
#

🤷

vague mason
#
            int hasAmount = 0;
            for(ItemStack item : player.getInventory().getStorageContents()){
                if(item == null) continue;
                if(item.getType() == null) continue;
                if(item.getType().isAir()) continue;
                if(item.getType() == material) continue;
                hasAmount += item.getAmount();
            }
#

hahaha what else can I try XD

dusty herald
#

ok what

vague mason
#

it's like always null XD

dusty herald
#

what exact line is throwing it

vague mason
#
if(item == null) continue;
dusty herald
#

what 😂

vague mason
#

hahah yeah exactly 😂

#

Spigot API broken

#

let me update to 1.16

#

With Spigot 1.16 item can be null XD

dusty herald
#

😂

vague mason
#

with 1.15 can't be null but it still is XD

#

now it's working 😂

#

haha API is broken for 1.15

quaint mantle
#

Error before was definitely just not you updating the plugin

#

Unlucky tho, incorrect null annotations

vague mason
quaint mantle
#

Yeah but you risk this

vague mason
#

for example if you use api from 1.8 you will know everything would works on 1.8

quaint mantle
#

Annoying life

vague mason
#

but if you use api from 1.16.5 then you need to be careful which methods you are using

#

then you need to like search for every method if it's available on 1.8

quaint mantle
#

I'm glad I would never care about people not on latest

#

Sucks for others tho

vague mason
#

haha I really care to support as much versions as I can.

#

from 1.8 to the latest on all my plugins

#

also newer versions like 1.17 or 1.18 support like max 30 players

#

so almost all servers will stay on 1.16.5

celest skiff
vague mason
#

no

#

if item is null then you skip this loop and go to the next item

grave kite
#

Hi, is there a way to prevent players using minecarts with chests and hoppers?

quaint mantle
#

I'd assume it'll be caught by the interact event

robust geyser
#

What should I do if I accidentally messed with randomtickspeed?

quaint mantle
#

just put it back to 3

robust geyser
#

[14:39:05] [Paper Watchdog Thread/ERROR]: Current Thread: Worker-Main-1
[14:39:05] [Paper Watchdog Thread/ERROR]: PID: 16 | Suspended: false | Native: false | State: WAITING
[14:39:05] [Paper Watchdog Thread/ERROR]: Stack:
[14:39:05] [Paper Watchdog Thread/ERROR]: sun.misc.Unsafe.park(Native Method)
[14:39:05] [Paper Watchdog Thread/ERROR]: java.util.concurrent.locks.LockSupport.park(Unknown Source)
[14:39:05] [Paper Watchdog Thread/ERROR]: java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
[14:39:05] [Paper Watchdog Thread/ERROR]: java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
[14:39:05] [Paper Watchdog Thread/ERROR]: java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
[14:39:05] [Paper Watchdog Thread/ERROR]: java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
[14:39:05] [Paper Watchdog Thread/ERROR]: java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
[14:39:05] [Paper Watchdog Thread/ERROR]: java.lang.Thread.run(Unknown Source)
[14:39:05] [Paper Watchdog Thread/ERROR]: ------------------------------

vague mason
robust geyser
#

As soon as I join the server it lags out and eventually turns itself off

grave kite
quaint mantle
#

I believe so

#

Just give it a shot

grave kite
#

ok, thanks

vague mason
#

Anticheats would ban everyone XD

robust geyser
vague mason
#

or not maybe they will check your default radomtickspeed

dusty herald
#

iirc

robust geyser
#

This explains..

#

What is the random tick speed range btw?

dusty herald
#

idk but the default is 3

quaint mantle
#

It's probably a short

vague mason
#

Any ideas for default buy and sell format

#

now they are green.

mystic tundra
#

I need help with my plugin.yml. I have a command with multiple options, one is thaf you dont add any otver words to it, just /baldify. Then you can /baldify a player and then everyone with *. How do I write that in the plugin.yml?

#

/baldify
/baldify Notch
/baldify *

#

Those are the commands

young knoll
visual tide
mystic tundra
#

Its not perms its multiple otger labels

#

Like essentials has smite

#

You can smite a target location with just /smit

young knoll
#

You handle that in the command method

visual tide
#

just add /baldify to your plugin.yml

mystic tundra
#

Oh ok so the

#

Ok

#

I have two commands in my plugin but both get run when I run this one

#

Im using the this.getCommand().setExecutor

#

And then in the command file I dont have any checks to see if the command is /baldify (if(label.equalsignorecase))

#

Should I add that?

eternal oxide
#

no

#

are you using a separate class for each command?

young knoll
#

You should give each command a different executor class

mystic tundra
#

Oh im stupid sorru

#

They do simular things so I copy pasted one to another and forgot to change the part

#

Its just a stupid mistake

silk mirage
#
public static Item getAttributedArmor(Item item, int amount) {
        ItemStack is = item.getItemStack();
        net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(is);
        NBTTagCompound compound = (nmsStack.hasTag()) ? nmsStack.getTag() : new NBTTagCompound();
        NBTTagList modifiers = new NBTTagList();
        NBTTagCompound armor = new NBTTagCompound();
        armor.set("AttributeName", new NBTTagString("generic.armor"));
        armor.set("Name", new NBTTagString("generic.armor"));
        armor.set("Amount", new NBTTagInt(amount));
        armor.set("Operation", new NBTTagInt(0));
        armor.set("UUIDLeast", new NBTTagInt(894654));
        armor.set("UUIDMost", new NBTTagInt(2872));
        modifiers.add(armor);
        assert compound != null;
        compound.set("AttributeModifiers", modifiers);
        nmsStack.setTag(compound);
        is = CraftItemStack.asBukkitCopy(nmsStack);
        item.setItemStack(is);
        return item;
    }
#

I'm using that, The item I get can be applied everywhere and even works when being hold

ivory sleet
#

So what’s the issue?

#

Also assert won’t work unless u use a jvm flag

hybrid spoke
#

i think he just hovered over the warning in his IDE and clicked on "add assert bla bla"

young knoll
#

Don’t we have an API for attributes

silk mirage
young knoll
#

Yes

#

And?

silk mirage
#

yea so

young knoll
#

Why would you use NMS when there is an API

hybrid spoke
#

if there is a workaround, you should use the workaround instead of NMS

#

same as for reflections

silk mirage
#

i don't think think there is a workaround

hybrid spoke
#

Don't we have an API for attributes

silk mirage
#

so the main issue for me is, The armor gives the play protection when even hold

silk mirage
#

smh

young knoll
#

Well there you go, have a solution

young knoll
#

I just gave you an API method

#

That lets you specify a slot

silk mirage
#

I see, So I won't even need NMS?

ivory sleet
#

no

wraith rapids
#

typical outdated person mindset

#

scurry to nms first before even looking at the api

silk mirage
#

I tried googling, That is what first came up

unreal quartz
#

then your googling skills need improvement

silk mirage
#

I just searched "NBTTags Bukkit API"

hybrid spoke
#

oh well

#

bukkit api

silk mirage
#

Oh well, I should have searched Spigot API

ivory sleet
#

Myes nbt isn’t exposed in spigot api

silk mirage
ivory sleet
#

You’re blessed with the persistent data container api and other abstractions instead

silk mirage
#

is there any example out there for applying AttributeModifier?

wraith rapids
#

yes, many

#

don't search for nbt tags

#

search for attribute modifiers

#

nbt tag is the most generic form of thing an item or an entity might have

hybrid spoke
wraith rapids
#

they are used for and represent everything

#

it is like trying to search for a new oil filter for your 86 model toyota hiace by googling "car"

silk mirage
#

got it

hybrid spoke
#

why did you write it 2 times?

silk mirage
#

hm

wraith rapids
#

because I can't see the first message

#

some connection issue with the client drops message feedback at random

hybrid spoke
#

@ivory sleet let our messages alone >:(

wraith rapids
#

now conclure deleted the duplicate and I still can't see the original

hybrid spoke
#

xD

ivory sleet
#

Should have deleted the former one

wraith rapids
#

does any vehicles plugin have actual proper physics

hybrid spoke
silk mirage
#

I don't see a Set_Base_Value or smth

ivory sleet
#

I don’t think you can change the base value

wraith rapids
#

like, when say a car is placed on an unlevel surface, it would rotate as if it were a real object

ivory sleet
#

Unless you do hacky reflection

wraith rapids
#

instead of just a model spinning in a cubical bounding box

hybrid spoke
#

reflections are always bad

wraith rapids
#

you can't modify base values

ivory sleet
wraith rapids
#

those are hardcoded into the game

silk mirage
#

i used NMS stuff and changed the base value-

#

oh

#

wait

wraith rapids
#

no, you added a modifier

silk mirage
#

base value = 0.0?

ivory sleet
#

Big brain

silk mirage
#

hmm

#

sus

#

alright, i'll try by adding

#

For the name argument, I guess its supposed to be "generic.armor" right?

hybrid spoke
ivory sleet
#

Yeah I guess

hybrid spoke
#

its like a pool without water with a barrier tape but with reflections you jump over that into the pool

ivory sleet
#

🥲

silk mirage
#

Uhhh, if I use attributemodifier i won't have to set the proper slots right?

wraith rapids
#

i don't have the effort to dive into nms to deal with collision shapes and shit

#

i'll just define a bunch of points along the model of the vehicle and spawn armorstands there to collide with shit

#

and apply velocity to each of them to keep them in the correct position relative to the vehicle

#

and apply reverse velocity/angular velocity to the vehicle to equalize the errors in their positions

foggy bough
#

Is there any other way to change what item drops with config .yml but I want to do this with every single block so I don't think config.yml will help me here

hybrid spoke
#

if you want to CONFIGURE it, you will have to use a config

silk mirage
#

UHH, Spigot 1.12.2 doesn't have ItemMeta#setAttributeModifier

#

and it doesn't have EquipmentSlot for "AttributeModifier"'s constructor

wraith rapids
#

consider using a version that isn't half a fucking decade out of date

silk mirage
#

hm

#

Wel

wraith rapids
#

or perhaps, if you like 1.12 so much, you should put some effort towards maintaining it

#

like other people around other projects do

silk mirage
#

"Why would you use NMS when there is an API"

#

there is a reason why i was using nms

young knoll
#

To be fair I expect people to be on the latest version

#

And I thought the API was in 1.12, guess not

silk mirage
#

hmm, Just a suggestion please don't say non-sense to people without understanding full question

hybrid spoke
#

it wasn't non-sense. using nms is bad. also you clearly doesn't understood your own question, otherwise you wouldn't have tried

wraith rapids
#

i ask you the same question I ask the 1.8 plebians

#

why do you use it if the api sucks?

#

why does the api suck if you still use it?

#

why aren't you doing anything about it?

silk mirage
#

It's not me who wants to use 1.12.2, It's my client

#

leave it i found a NMS way of assiging slots

wraith rapids
#

why, out of all of the projects out there, it is you outdated fucks that wallow around cobbling together barely functional nms and reflection based solutions to problems that have already been solved properly in the modern api

#

solutions that you could trivially backport to your version of choice

hybrid spoke
#

your client? do you mean the server who forces players to do a screenshare and show all his files?

wraith rapids
#

why is it that despite everything being fucking shit and inoperable you don't do anything about it

wraith rapids
#

it's like looking at a thousand headless chickens running around aimlessly, each one repeatedly struggling to solve the same problem and coming up with a shitty solution

silk mirage
#

crackpixel doesn't even use 1.12-

wraith rapids
#

what is it that prevents you fucks from forming a community and actually maintaining the version you find to be so good and popular

#

projects with way smaller communities do it

jade perch
#

Cause it's a bunch of kids

untold gazelle
#

bump

wraith rapids
#

they should grow up

young knoll
#

The hell is a crackpixel

wraith rapids
#

it's already been 7 years

ivory sleet
#

NNY chill a little bit

wraith rapids
#

how many more years do they need

hybrid spoke
#

and if they don't want to share their computer thingys, they get a permanent ban. pog

young knoll
untold gazelle
#

is it inside the server jar? because i don't see any of the classes that i think are supposed to be in nms

young knoll
#

It’s inside the compiled spigot jar, yes

granite stirrup
#

w h a t

#

theres not a thing for admin message but you could just loop through every player check if they have op or a certain permission that admins have and then send a message to them

wraith rapids
#

Bukkit.broadcast

opal juniper
#

Lmao

wraith rapids
#

it takes a permission node

opal juniper
#

Oh yeah

#

It does

#

Huh

granite stirrup
#

it does?

wraith rapids
#

yes

granite stirrup
#

i didnt know that

hybrid spoke
#

yep

opal juniper
#

?tag

#

Huh

hybrid spoke
#

cause of that its not thread-safe

granite stirrup
#

?

#

so is bukkit.broadcast faster?

hybrid spoke
#

shouldn't. and if, its not noticeable at all

granite stirrup
#

so it basically does the same thing as the for loop looping through all the players and sending them a message?

#

or is it something else

hybrid spoke
#

most likely, didn't looked at the code. should also send the message to the console iirc

granite stirrup
#

im trying to find it but i cant XD

hybrid spoke
#

the code whispered to me that its just checking every CommandSender for the given permissions and adding them to a list, if they have the permission.

#

then an event is called and if its not cancelled #sendMessage is being executed for every CommandSender

#

seems like ops have the permissions to receive your broadcast anyways

#

just add any permission you want to check for and ops will probably receive it too

granite stirrup
#

"yourplugin.admin.recievecommands"

#

lol

#

jk

#

but just put anything

#

im bored lmao

#

We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand
Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you
We've known each other for so long
Your heart's been aching but you're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

#

just copied some lyrics from google

#

and bam you got rickrolled :)

#

jk

tame coral
#

wow

#

impressive

grave kite
#

why can't I cancel opening inventory or placing an item in a hopper?

maiden briar
#

Is it possible to do some maven commands so you can install a jar file to a Maven repository in (Java) code? (Like BuildTools)

chrome beacon
grave kite
eternal night
#

installs your artifact into your local maven repo

maiden briar
grave kite
#

oh, right. Thanks

eternal night
#

oh. idk

maiden briar
#

Like creating a program which installs the file for me

eternal night
#

call the mvn script from java ?

maiden briar
#

Where can I find them?

eternal night
#

don't

#

please

maiden briar
#

Yes but that does not work

#

That is the problem

grave kite
#

this one still doesn't work. Is it even possible to prevent accessing the inventory like that?

#

I don't even know what that means 🙂 I just copied it from somewhere

hybrid spoke
#

or remove it

grave kite
#

I'll set it to HIGHEST, but I don't think it would solve it

#

Any ideas how I can prevent players accessing minecrart's inventories without destroying the minecarts?

paper viper
#

Ahahaha

quaint mantle
paper viper
#

Sorry about that

#

Lmao

#

I’m still developing the library, and the docs are severely outdated

#

Also I’m on vacation for another like 4 days so I can’t code until then :Sadge:

grave kite
spark hollow
#

I have a (hopefully) quick question:
In some of my plugins i use SQLite. Currently I bundle the whole sqlite-jdbc-3.xx.xx.jar file in my plugin. As far as I have understood from the announcements SQLite is already bundled in spigot and can be used in plugins as well.
Now: How do I do it? What do I need to change to use the spigot SQLite?

eternal night
#

you simply do not include it in your dependency list and do not shade it

#

SQL drivers are purely runtime anyway and should only be used through the java.sql interface

proud basin
#

How can I add a have a line space in between these 2 lines

#

But am I even able to use saveDefaultConfig with a custom yml file

fading lake
proud basin
#

@wraith rapids doesn't saveResource look for files in the jar?

#

oh

#

so then what path would I use then

#

yea but the path is unsynced

#

but did you mean like src/main/resources/messages.yml

eternal oxide
#

No, it will be the path in your jar

proud basin
#

that would be the path in my jar

eternal oxide
#

No, thats the path in yoru project

proud basin
#

actually no

eternal oxide
#

yes, but argue all you like

#

If you copied your resources correctly they will be in the root of your jar

sharp bough
#

is it better to use runnable or time stamps to manage cooldowns?

eternal oxide
#

depends on teh length of yoru cooldown

sharp bough
#

i dont know, im making a kit plugins for another person to configure it, he might use 3 days or 10 seconds

quaint mantle
#

Imo time stamps

eternal oxide
#

in that case, timestamps

sharp bough
#

k thx

proud basin
#

right so I believe im using the corret path and it can't find that path GrantIt/messages.yml

eternal oxide
#

do you have a folder inside your jar called GrantIt ?

proud basin
#

yes

eternal oxide
#

can you show us your jar structure?

#

Not your project. Your Jar

proud basin
#

wrong image

eternal oxide
#

ok, there is no GrantIt folder inside your jar. they are in the root, so just use the file name

proud basin
#

ugh no new line was made

eternal oxide
#

new line?

rapid meteor
#

Why doesn’t it work?

proud basin
rapid meteor
#

My plugin.yml

proud basin
#

trying to add a space in between them

rapid meteor
#

I did

#

Oh like in the folder?

#

What do you mean add the file?

eternal oxide
proud basin
#

I did elgar

eternal oxide
#

?paste your resource

undone axleBOT
eternal oxide
#

^

proud basin
#
public void onEnable() {
        messageConfig.setup();
        config();
        saveResource("messages.yml", false);
        messageConfig.reload();
    }

    public void config() {
        messageConfig.get().set("not-person", "&cYou must be a player to execute that command.");
        messageConfig.get().set("no-permission", "&cYou don't have permission to do this!");
    }
rapid meteor
#

Can anyone help me with plugin.yml?

eternal oxide
rapid meteor
#

Ok.

#

Let me send the picture.

proud basin
rapid meteor
#

My command won’t apply

#

The plugin.yml doesn’t work.

eternal oxide
rapid meteor
#

It can’t be displayed.

#

It doesn’t pop up.

#

And I have no idea why.

#

I don’t know?

#

How check?

#

It says 0

#

Yes

#

?

#

It says permission.yml ignoring

eternal oxide
proud basin
rapid meteor
#

I just send a picture look ⬆️

eternal oxide
rapid meteor
#

What more do you want?

eternal oxide
proud basin
#

hm

#

let me try something then

rapid meteor
#

How do I do that?

eternal oxide
# proud basin hm

Your issue is that you are adding sections to your messages.yml before you save the resource. If the file already exists the resource will not be copied from your jar into your folder.

eternal oxide
undone axleBOT
rapid meteor
#

Should I just paste it all?

#

All there is in the latest.log is already on my picture.

proud basin
rapid meteor
#

main: me.Erawan.HelloWorld.Main
name: HelloWorld
version: 1.0
author: Erawan

commands:
Hello:
usage: /<command>

#

Does it need anything?

#

Then?

granite stirrup
#

why are you naming your main class Main tho

#

ik

#

but just why

proud basin
#

this is how im reloading my config though fileConfiguration = YamlConfiguration.loadConfiguration(file);

rapid meteor
#

Server permissions file permissions.yml is empty, ignoring it.

#

That's what it prints.

proud basin
#

and that would make it null

rapid meteor
#

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
    
    @Override
    public void onEnable() {
        
    }
    
    @Override
    public void onDisable() {
        
    }
    
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(label.equalsIgnoreCase("hello")) {
            if(sender instanceof Player) {
                Player player = (Player) sender;
                player.sendMessage(ChatColor.RED + "Hey welcome to the server");
                return true;
            } else {
                sender.sendMessage("Hey Console!");
            }
        }
        
        return false;
    }
}
proud basin
#

so ima do this

granite stirrup
#

wat if theres another plugin that has a main class in me.Erawan.HelloWorld.Main

rapid meteor
#

Then what is?

#

What do you want?

#

It is.

#

Plugins.

#

In my Spigot server.

#

Folder.

#

I can't tell if you are being ironic or nah.

#

How?

#

It's pasted right in there.

granite stirrup
#

what if hes running a vanilla server

eternal night
#

LOL

rapid meteor
#

You see it's pasted right in there.

granite stirrup
#

but what if the server jar you have isnt spigot

rapid meteor
eternal night
#

what is the output of /version

rapid meteor
#

Where should I do this?

#

In the cmd.

eternal night
#

or ingame

rapid meteor
#

It says wrong.

eternal night
#

in the server shell it would obviously just be version

rapid meteor
#

When I type it.

eternal night
#

:>

#

no way

#

can you try it ingame

#

😂

proud basin
#

oh my this message is annoying Could not save messages.yml to plugins\GrantIt\messages.yml because messages.yml already exists.

rapid meteor
#

Me?

tame coral
#

Is there anyway to modify a Score's object name without resetting the scoreboard ?

rapid meteor
#

/scoreboard (name) modify

#

I think.

tame coral
#

Not with commands

rapid meteor
#

Oh.

tame coral
#
final Scoreboard board = Objects.requireNonNull(Bukkit.getScoreboardManager()).getNewScoreboard();
        final Objective objective = board.registerNewObjective("TEST", "dummy", ChatColor.RED + "Test but in red");
        objective.setDisplaySlot(DisplaySlot.SIDEBAR);
        objective.getScore(player.getDisplayName() + " : " + coins + " coins").setScore(0);
        player.setScoreboard(board);
#

I'm currently doing that

eternal oxide
tame coral
#

But if i need to add new lines to my thing I need to re-set them every time i update the scoreboard

#

And i want to avoid that as i can be very heavy

#

i am not using commands

#

oh yeah

proud basin
proud basin
#

because im using a custom yml file

#

no

eternal oxide
#

ok, why are you using a custom config when support for teh config is already built in?

proud basin
#

because it makes it look cleaner

eternal oxide
#

cleaner? you literally just renamed your config.yml to messages.yml and have to add extra code to handle it.

proud basin
#

yeah

eternal oxide
#

Thats not cleaner

proud basin
#

easier to find stuff

#

like im not gonna put everything in config.yml

#

that's just stupid

eternal oxide
#

if you name it config.yml all you have to do is...java saveDefaultConfig();

proud basin
#

Im gonna have multiple config files

eternal oxide
#

thats fine, but don;t throw away the already supported config just for that

proud basin
#

ok but im keeping messages.yml

#

I will add a config.yml

eternal oxide
#

thats fine, then do as I said above, 4 lines gives you both config and messages

dusk flicker
#

How is this still going on

proud basin
dusk flicker
#

you working on your problem

proud basin
#

????

#

it hasn't even been that long

#

5 minutes

#

nah

#

you smoking

eternal oxide
#

Longer, I took my dog for a walk in the middle 🙂

proud basin
#

anyways why did you want me to do YamlConfiguration.loadConfiguration(new File(getDataFolder(), "messages.yml")); when what I had worked?

stiff topaz
#

tf is this

proud basin
#

the guy wanted me to do \n

#

I wasn't gonna do that

eternal oxide
stiff topaz
#

Wasn't me

#

more than 1 im guessing

#

Doubt it

#

If you do @ ollie theres only two

dusk flicker
#

There's 6 of em

proud basin
#

hold up

stiff topaz
#

nvm

proud basin
#

that messes up my command

stiff topaz
#

do @ oll

#

theres a few

eternal oxide
proud basin
#

am I suppose to do plugin.getConfig().getString() now?

eternal oxide
#

yes

proud basin
#

ah ok

#

I had messageConfig.get().getString("not-player")

dusk flicker
#

My dude how is this so hard

proud basin
#

🖕

sharp bough
#

lmao

dusk flicker
#

lol

dusk flicker
proud basin
#

k

#

that's a nice error

granite stirrup
proud basin
#

it was towards Rack

#

Is there a reason why I can't just use messageConfig.get().getString?

whole stag
#

hunted.setColor(ChatColor.BLUE | ChatColor.UNDERLINE);
App.java:[21,40] bad operand types for binary operator '|'

😒

#

Apparently not

#

That's dumb

granite stirrup
#

wouldnt u use + or is it something else

whole stag
#
  • also doesn't work
granite stirrup
#

isnt the chatcolor api from bungeecord tho

whole stag
#

No biggie, it doesn't need to be underlined

dusk flicker
#

yeah the chat color system is pretty shitty

proud basin
#

so I can get the config

whole stag
#

I can use the prefix for color blind support

#

You mean like the config.yml file?

dusk flicker
#

^ yes the above person is attempting to make a secondary configuration file

#

Which is easy but they have somehow complicated it

proud basin
#

anyways'

#

it works

whole stag
#

👍

proud basin
#

but still 🖕 to you Rack

unreal quartz
#

lmfao wtf

drowsy sierra
#

whats going to happen with 1.17.1?

quaint mantle
drowsy sierra
#

will spigot release a new version?

#

f

arctic jetty
#

oh noes!!

quaint mantle
#

1.17.1 isnt even fucking released....

drowsy sierra
#

ya but pre-releases?

quaint mantle
#

spigot doesnt do snapshots/pre releases

#

they never have

drowsy sierra
#

will it just be client bugfixes or server software need to be updated

quaint mantle
#

server software update

whole stag
#

Past versions they've had different server versions, I imagine it would be the same here

quaint mantle
#

pretty sure at least

drowsy sierra
#

ok

arctic jetty
drowsy sierra
#

ty!

delicate fractal
#

is there a way to make different chats like /chat all or /chat group that type of stuff and is there a way to toggle chat off

granite stirrup
arctic jetty
#

i looked for the tabcompleter class but it seems to only be for suggesting parameters

drowsy sierra
#

didn't it happen to 1.16.5?

past maple
#

1.16.5 added piglin brute

granite stirrup
#

commandmap?

#

wtf is the BukkitCommand class

quaint mantle
delicate fractal
quaint mantle
#

you pick one, and if its the wrong someone will tell you and you can move

delicate fractal
#

ok

#

srry

quaint mantle
#

seems like that would be common sense

granite stirrup
cobalt lagoon
#

Just make a chat target object, and have some collection of which players will receive the message, or one of the other 100 ways of doing it.

arctic jetty
granite stirrup
arctic jetty
#

it's a class

#

i think it's somehow related to the PluginCommand class

quaint mantle
arctic jetty
#

yeah, but thanks to me we figured it out!!!

granite stirrup
#

well i use the commandmap and not the BukkitCommand class so i have no fucking idea what it is

sharp bough
quaint mantle
#

jesus christ, explains a lot

granite stirrup
#

lol

sharp bough
#

i remember once he asked me how to ask if someone could make a plugin for him

quaint mantle
#

🤣

sharp bough
#

and then asked me where to ask if someone could make a plugin for him

delicate fractal
#

shut up

#

u stupid

quaint mantle
#

sounds like something a 13 year old would say

delicate fractal
#

yes

#

i think so

cold field
#

I'm sorry for interrupting you guys but I need to do a quick question. Should I do something that auto-update my commandManager? So that I don't needs anymore to edit my old plugin if I fix a bug in my command manager...

sharp bough
#

lol

delicate fractal
#

ok thats nice

granite stirrup
sharp bough
digital plinth
#

is spigot still experimental?

granite stirrup
#

?

sharp bough
cold field
digital plinth
#

also to update a server do i just change the jar

stiff topaz
#

How can I check if a user is in my custom GUI. Can't find anything about it online

digital plinth
delicate fractal
quaint mantle
#

1.17 is unstable

granite stirrup
digital plinth
#

oh rip

granite stirrup
#

its a little unstable

delicate fractal
sharp bough
#

what are you trying to do

granite stirrup
#

but its better than what it was before

digital plinth
#

so the risk of upgrading to 1.17 is that i lose world files correct?

#

so if i back them all up

stiff topaz
quaint mantle
digital plinth
#

i should be fine?

delicate fractal
granite stirrup
#

something else

sharp bough
stiff topaz
#

Thanks

sharp bough
digital plinth
sharp bough
#

its unclear

granite stirrup
#

bugs

#

i mean yeah your world could corrupt

sharp bough
#

1.17 is 💩

cold field
granite stirrup
#

also 1.17 is ass

#

who wants it

delicate fractal
#

i have alot of experience with 1.17 and like DONT use it

digital plinth
granite stirrup
#

performance has dropped by like 95%

delicate fractal
#

the server crashes chunks dont load and alot more glitches

digital plinth
stiff topaz
delicate fractal
granite stirrup
sharp bough
digital plinth
#

so 1.17 api isn't buggy

stiff topaz
granite stirrup
stiff topaz
#

Thats one way of doing it

sharp bough
#

right?

stiff topaz
#

Ye

opal juniper
#

You pinged me @wraith rapids

sharp bough
#

you should create a inv, add theitems and then on inv click event check if the clicked inv is the one you made

#

like this:

opal juniper
#

What did ya want

sharp bough
#

sorry its messy

#

i was testing with persistent data

#

np, hope it helps

granite stirrup
#

isnt persistent data 1.14+?

sharp bough
#

idk

quaint mantle
#

yes

sharp bough
#

it was just a random test

granite stirrup
#

lol so if you want your plugin to support 1.12+ you cant use persistent data 🤣

stiff topaz
#

1.12 is for nerds

granite stirrup
#

some people do have 1.12 servers

#

idk why

delicate fractal
#

ye like why would u make 1.12 server what does 1.12 have that other versions havent

granite stirrup
#

performance

#

and can hold more players

delicate fractal
#

ok ye thats the only reason

alpine urchin
#

he meant the project in general

granite stirrup
#

but who wants to do that

#

lol

arctic jetty
#

question: isn't this class basically useless???

sharp bough
#

so what happens if i make a plugin for 1.14+ and add it to a server that supports 1.8+, will the player brake the plugin, not load it at all ?

opal juniper
#

@wraith rapids

#

Did you need me

#

U pinged me earlier

arctic jetty
granite stirrup
#

CommandMap?

arctic jetty
#

it's used once in the SimpleCommandMap class

#

i still don't know why it doesn't just use the Command class

#

because BukkitCommand and Command are the same(?)

opal juniper
#

one of the many mysteries to md5

#

and, by extension, spigot

arctic jetty
#

hm

#

maybe it's to distinguish between spigot classes and bukkit classes

quaint mantle
#

How can i use build tools for maven?

opal juniper
#

What do you mean? what are you trying to do

quaint mantle
#

I want to use nms but i can't

#

I already have build tools and i ran it

opal juniper
#

ok

#

show your pom

#

👋

#

yep

#

that is me

#

No - the client was really stupid

#

i didn't find any packets that were sent

#

at all

#

the mouse movement still worked fine on their actual player

#

just w/a/s/d/space/crouch did nothing

#

and

#

after doing more testing it appears that the player turning was a client thing

#

the packets didnt get sent to the server

#

so other players couldn't see it

ivory sleet
arctic jetty
#

ah so it's just to differentiate

quaint mantle
# opal juniper show your pom
  <repositories>
        <repository>
            <id>papermc-repo</id>
            <url>https://papermc.io/repo/repository/maven-public/</url>
        </repository>
        <repository>
            <id>sonatype</id>
            <url>https://oss.sonatype.org/content/groups/public/</url>
        </repository>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
        <repository>
            <id>papermc</id>
            <url>https://papermc.io/repo/repository/maven-public/</url>
        </repository>
        <repository>
            <id>spigot-repo</id>
            <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>com.destroystokyo.paper</groupId>
            <artifactId>paper-api</artifactId>
            <version>1.13.2-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.github.MilkBowl</groupId>
            <artifactId>VaultAPI</artifactId>
            <version>1.7</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>minecraft-server</artifactId>
            <version>1.13.2-SNAPSHOT</version>
        </dependency>
    </dependencies>```
ivory sleet
#

No

eternal oxide
ivory sleet
#

One allows polymorphing of TabCompleter and CommandExecutor

#

(PluginCommand)

arctic jetty
#

yeah

opal juniper
#

not minecraft-server

quaint mantle
#

Okay

opal juniper
#

i cannot really remember

#

lemme open intellij real quick

quaint mantle
#

Me?

vague mason
#

How do I get sign rotation like on which block sign is placed?

opal juniper
quaint mantle
#

Can you send the dependency?

ivory sleet
#

WallSign ziga

vague mason
#

thanks

#

I was trying with org.bukkit.material.Sign

#

deprecated thing

ivory sleet
#

Ah yeah

vague mason
#

bye bye all sign shop plugins

opal juniper
#

ye

quaint mantle
#

They removed nms in paper

#

And spigot

#

I have build tools but its not working

#

So how can i use nms

quaint mantle
proud basin
digital plinth
granite stirrup
#

like packets i think

opal juniper
eternal oxide
opal juniper
#

Yes

real spear
#

Sorry, but I am new to spigot plugin development. On what event is reload run on? (Is there a doc full of all events or something?)

granite stirrup
#

/reload shouldnt be used

digital plinth
proud basin
#

I love /reload

#

my best friend

granite stirrup
digital plinth
#

okay

eternal oxide
# opal juniper Yes

My idea may not work but if the player is in a vehicle does it generate teh drive packets?

granite stirrup
#

net minecraft server

digital plinth
#

ik

#

its not a website btw

digital plinth
granite stirrup
#

but its reversed

opal juniper
#

Obviously when a player is in a boat for example it sends the STEER_VEHICLE packets

eternal oxide
#

NO clue what the packets are but I remember seeing someone talking about controlling all entities when ridden

granite stirrup
#

teleport?

digital plinth
granite stirrup
#

wont it?

#

i thought it would work but it would be janky

digital plinth
#

does he want to recreate MrClayFish's vehicle mod

#

it like puts the player to third person perspective when they ride in a car

opal juniper
#

WE ARE IN BUSINESS

digital plinth
#

?

opal juniper
#

ElgarL ❤️

digital plinth
#

what?

eternal oxide
#

nice

opal juniper
#

thank you

digital plinth
#

what did you do?

#

someone riding a boat

opal juniper
#

that is me

digital plinth
#

ohhh

opal juniper
#

my camera is disconnected from my body

digital plinth
#

cooooool

#

packets are magical

#

XD

#

and complicated

arctic jetty
#

is there some magical method that adds a command to autocomplete

vague mason
#
if(!(event.getClickedBlock().getState() instanceof WallSign)) return;
#

this one not working

sharp bough
vague mason
#

it return even tho it's wall sign (Sign on the chest)

granite stirrup
opal juniper
#

im gonna try some stuff first @wraith rapids

sharp bough
#

no idea, still overriding a command is not a good idea

opal juniper
#

but yea

#

nice

arctic jetty
#

my plugin allows for command creation -> i can't use plugin.yml since commands are being created at runtime -> i have to use bukkitcommand instead of making a commandexecutor -> for some reason commands aren't suggested in chat

sharp bough
#

add weight cuz cars plugins move all at the same speed

opal juniper
#

OHHH thats really cool

granite stirrup
#

well you need the commandmap then

arctic jetty
#

i have the commandmap

dusty herald
#

add a shifter

arctic jetty
#

i'm registering the command

granite stirrup
#

no ur using BukkitCommand

arctic jetty
granite stirrup
#

¯_(ツ)_/¯

dusty herald
#

show code

arctic jetty
#

ok wait i'll just clean it up a bit

granite stirrup
#

might be a client issue

#

older versions on a newer server might make it not display it in the tab completion

arctic jetty
#

code in main class:

public void reloadCommands() {
        Set<Entry<String, Location>> entrySet = commands.entrySet();
        
        for (Entry<String, Location> entry : entrySet) {
            //  This associates the command names with the command block location
            CustomCommand cmd;
            String name = entry.getKey();
            Location cmdBlockLocation = entry.getValue();
            if(commandExecutors.containsKey(name)) { // commandExecutors is misleading: it's just a hashtable associating command names with their BukkitCommand class
                cmd = commandExecutors.get(name);
            }
            else {
                cmd = new CustomCommand(name, cmdBlockLocation, this);
                commandExecutors.put(entry.getKey(), cmd);
            }
            //cmd.register(commandMap);
            commandMap.register(name, cmd); // registers command, it works fine but for some reason it won't suggest it in chat
            myFileConfig.set(name + ".x", cmdBlockLocation.getX());
            myFileConfig.set(name + ".y_", cmdBlockLocation.getY());
            myFileConfig.set(name + ".z", cmdBlockLocation.getZ());
            myFileConfig.set(name + ".world", entry.getValue().getWorld().getName());
            save();
        }
    }
#

my client is on 1.17

granite stirrup
#

¯_(ツ)_/¯

arctic jetty
#

also commandExecutors is misleading

#

it's just a hashtable associating the command names with the bukkitcommand class

granite stirrup
#

welp idk cuz it normally works for me

maiden briar
#

install:install-file, -Dfile="C:\Users\<>\IdeaProjects\TvheeAPIRepositoryInstaller\work\TvheeAPI-1.6.0-01.jar", -Dpackaging=jar, -DgroupId=me.tvhee, -DartifactId=TvheeAPI, -Dversion=1.6.0

What is wrong with this maven command? I get The syntax of the command is incorrect.

granite stirrup
#

what is the , for

sharp bough
#

thats a command

#

wow

maiden briar
#

, is the printed java array

#

Java seperates it with a ,

granite stirrup
#

you dont need the ,

maiden briar
#

That is how Java prints arrays, I don't use it in the actual command

granite stirrup
#

bruh

#

no commas

#

remove them

maiden briar
#

Ok

granite stirrup
#

and the command will work

ivory sleet
#

Or smtng

maiden briar
#

Yes exactly

#

But I do new ProcessBuilder(command)

#

Here are no ,

granite stirrup
#

but you dont use , in commands

maiden briar
#
Exception in thread "main" java.lang.RuntimeException: Error running command, return status !=0: [C:\Users\<>\IdeaProjects\TvheeAPIRepositoryInstaller\work\apache-maven-3.6.0/bin/mvn.cmd, install:install-file, -Dfile="C:\Users\<>\IdeaProjects\TvheeAPIRepositoryInstaller\work\TvheeAPI-1.6.0-01.jar", -Dpackaging=jar, -DgroupId=me.tvhee, -DartifactId=TvheeAPI, -Dversion=1.6.0]
    at me.tvhee.tvheeapi.repositoryinstaller.Builder.runProcess0(Builder.java:257)
    at me.tvhee.tvheeapi.repositoryinstaller.Builder.runProcess(Builder.java:186)
    at me.tvhee.tvheeapi.repositoryinstaller.Builder.runMaven(Builder.java:178)
    at me.tvhee.tvheeapi.repositoryinstaller.Builder.start(Builder.java:134)
    at me.tvhee.tvheeapi.repositoryinstaller.Bootstrap.main(Bootstrap.java:31)

Is the full error

ivory sleet
#

Cuz java just prints arrays with [ for each dimension and then then Lqualifiedname; iirc

#

Or the default toString rather

granite stirrup
#

f you cant import just 1.16 api

#

in pom

#

i mean i guess its fine

maiden briar
eternal night
#

Is paste down ? XD

#

?paste

undone axleBOT
maiden briar
#

Got parts of Spigot's BuildTools, but I can't find how they run Maven commands after downloading the Maven directory

ivory sleet
#

Through nms yeah jeff

opal juniper
#

yeah

#

i just realised my mistale

#

mistake*

#

nvm

ivory sleet
opal juniper
#

ok

#

so

#

i have a yaw and pitch of a head look packet

#

i need to now apply that to an entity

#

anyone know how?

lament bronze
#

you gotta sync commands

#

for newer verisons

arctic jetty
#

sync commands?

lament bronze
#

yeah

#
    public static void syncCommands() {
        try {
            Method m = Bukkit.getServer().getClass().getDeclaredMethod("syncCommands");
            m.setAccessible(true); // just in case
            m.invoke(Bukkit.getServer());
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
arctic jetty
#

interesting
thanks for the help, i'll try that

lament bronze
#

this will make it appear in tab complete

#

if you're using the server jar you could just cast server to CraftServer

calm whale
#

can anyone please help me with maven ? I'm trying to use my github repo as a maven repo, I'm following this tuto: https://dev.to/iamthecarisma/hosting-a-maven-repository-on-github-site-maven-plugin-9ch

I'm getting this errorcmd Failed to execute goal com.github.github:site-maven-plugin:0.11:site (default) on project BaseAPI: Error retrieving user info: Not Found (404)

Here is my pom.xml: https://hastebin.com/midahesoka.xml

DEV Community

This article provides a step by step guide on publishing a maven project from GitHub using site-maven...

ivory sleet
calm whale
#

yes my settings.xml has the rights credentials

arctic jetty
#

that's funny, i was thinking of something about reloading the command list

lament bronze
#

👍

opal juniper
#

Wait

#

Can entities look up & down

ivory sleet
#

Uh sort of

opal juniper
#

but on their own

ivory sleet
#

No they have a limit

opal juniper
#

hmmmmm

#

idk how i am gonna do this then

ivory sleet
#

What r u doing btw

opal juniper
#

3rd person cam

#

so i need to take the cam and put it on an entity

ivory sleet
#

Oh well, maybe derive an nms entity and then just override the rotation logic

opal juniper
#

Man

#

That sounds like more work than i wanted

#

wait

#

armour stand can look up and down right

ivory sleet
#

Hmm yeah

#

Or

#

Ye that’s correct

#

Idk if it has any bounds but big chance it hasn’t

granite stirrup
#

im pretty sure i didnt have to do syncCommands on 1.16.5

lament bronze
#

you do

granite stirrup
#

i swear it worked for me without

#

🤔

lament bronze
#

just modifying the commandmap doesn't update it

ivory sleet
#

Spigot calls it for you under bootstrapping

lament bronze
#

well yes but he's modifying the command map

cold tartan
#

is there a way to not detect player inventory click in InventoryClickEvent? like detect clicks in chests, but not in the player's inventory

lament bronze
#

the command map class never syncs commands

#

its only done on startup

granite stirrup
lament bronze
#

thats why registering on start works and tab completes

ivory sleet
#

Yeah exactly, it does sync commands whilst bootstrapping

lament bronze
#

if you do it later on you gotta sync it manually

granite stirrup
#

oh wait i had the register in the onEnable is that why i got tab completes

arctic jetty
lament bronze
calm whale
lament bronze
#

or it might be after all plugins have loaded

#

can't remember

ivory sleet
#

Yeah latter

lament bronze
#

yeah makes sense

ivory sleet
#

😅

granite stirrup
#

it just came up boots and some random bullshit

#

XD

ivory sleet
#

It also ends up being where most of the coupling in your application resides (it has to reside somewhere), but this is a side effect, not the purpose.

In more general terms, a bootstrapper is just a class or method which prepares/configures a group of classes/objects or an entire API for your specific needs and use.```
Taken from fake stackoverflow
granite stirrup
#

lol

ivory sleet
#

But yeah bootstrapper is the classes responsible for starting up the entire application

#

Bootstrapping is the process itself

granite stirrup
#

on google

#

i looked on the whole 1 page i only look at

ivory sleet
#

First one that came up

granite stirrup
#

didnt come up for me

#

also im not reading through all that