#help-development

1 messages ยท Page 226 of 1

meager lynx
#

like steve for example

eternal oxide
#

Then I don;t believe you can use player skins on Mobs

meager lynx
#

oh wait

#

its ItemMeta

charred blaze
#

how do i send packets to player? i googled it but they are for older versions of nms

grizzled bridge
#

How can I create a team with command and set custom prefix in tab?

meager lynx
#

im gonna use the NMS way

#

but my current problem is i cant import ServerPlayer

quaint mantle
#

That method doesn't require third parameter LAMO

meager lynx
#

no like

eternal oxide
#

if you are depending on spigot you should have ServerPlayer

meager lynx
#

ItemStack.getItemMeta().addEnchant(Enchantment.CHANNELING, 1, true);

#

this @quaint mantle

meager lynx
#

it only allows me to create a type for it

#

this is my plugin part

#

my depending part

eternal oxide
#

?paste your whole pom

undone axleBOT
meager lynx
remote swallow
meager lynx
#

wdym

quaint mantle
meager lynx
#

๐Ÿ‘

eternal oxide
eternal oxide
#

no

#

classifier

#

ad a classifier tag of remapped

#

I don;t have my ide open so going from memory

#

you then need to run BuildTools with the --remapped switch

meager lynx
#

ow

#

so

<classifier>remapped</classifier>
``` instead of 
```<classifier>remapped-mojang</classifier>```
#

when i add this classifier

#

im getting the error

#
Unresolved dependency: 'org.spigotmc:spigot:jar:1.19.2-R0.1-SNAPSHOT'```
grizzled bridge
quaint mantle
meager lynx
#

this is my first time trying NMS so its pretty confusing

#

can i use EntityPlayer @eternal oxide

eternal oxide
#

not on 1.19.2

meager lynx
#

๐Ÿ’€

#

so like what do i do now

eternal oxide
#

I can open my ide in about 15 mins

eternal oxide
#

no

#

I don;t remember

#

one is correct

#

which is why I need my ide to tell you

meager lynx
#

in the pom.xml there, its remapped-mojang

#

using it

meager lynx
eternal oxide
#
        <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot</artifactId>
            <version>${project.spigotVersion}</version>
            <classifier>remapped-mojang</classifier>
            <scope>provided</scope>
        </dependency>```
meager lynx
#

๐Ÿ‘

eternal oxide
#

import net.minecraft.server.level.ServerPlayer;

meager lynx
#

removing the remapped-mojang kinda works, but like i cant get ServerPlayer

#

its asking me to add a jar

eternal oxide
#

yes, you need to run buildtools with --remapped

meager lynx
#

ok lemme try

#

java -jar BuildTools.jar --rev --remapped 1.19.2

#

?

#

btw can i run it in the same directory as the previous install?

#

so it just updates itself

#

or should i do it seperately again?

eternal oxide
#

yes, and no that command is wrong

meager lynx
eternal oxide
#

java -jar BuildTools.jar --remapped --rev 1.19.2

#

I think

brisk estuary
#

Hi, I'm getting an error that I can't understand. Every time my plugin is disabled I get the following error:

chrome beacon
#

?paste the error

undone axleBOT
brisk estuary
#
@Override
    public void onEnable() {
        instance = this;
        this.clanManager = SimpleClans.getInstance().getClanManager();
        this.settingsManager = new SettingsManager(this);
        this.dataManager = new GsonManager();
        new LVExpansion(this);
        this.manager = new LVCommandsManager(this);
        this.registerEvents();
        this.logStatus();
    }

    @Override
    public void onDisable() {
        this.dataManager.save();
    }
#

The thing is that every time the plugin is enabled the variable datamanager is initialised and there is nothing in my plugin that turns it into null

meager lynx
brisk estuary
#

so I can't understand how it could be null in the onDisable method

chrome beacon
eternal oxide
quaint mantle
#

Yo do anyone here have an idea how to make a plug in which makes the player get the resistance 5 Potion Effect when he wears a full set of armor and all pieces are enchanted with protection 4?

brisk estuary
#

the order in this case does matter

meager lynx
chrome beacon
meager lynx
#

btw if i were to use another plugin which is not remapped

#

will i need to install it again without --remapped?

#

or it should be fine?

eternal oxide
#

no, you have both in your local repo now

meager lynx
#

ok tysm

languid flare
#

How can I change max slots bungeecord with command?
/slots 1000

wet breach
#

?services

undone axleBOT
hoary lance
#

how do I add custommodeldata for a potion this doesn't work for some reason

charred blaze
#

How do I send packets to player? I googled it, but they are for older versions of NMS

echo basalt
#

Just cast your bukkit player to an nms player

#

by doing ((CraftPlayer) bukkitPlayer).getHandle()

charred blaze
echo basalt
#

and look for any methods or fields regarding connection

#

Usually

#

nmsPlayer.connection.send(packet) is the go-to

wet breach
echo basalt
#

might be nmsPlayer.connection.b.a(packet)

#

or whatever

#

but it has to do with the player's connection

#

and takes a packet

wet breach
#

only thing that might have changed is the obfuscated method names

echo basalt
#

just apply the same logic to all other nms troubles and you'll go far in life

#

I still need to work on my nms tutorial

#

have had it stalled for the past month

wet breach
charred blaze
echo basalt
#

๐Ÿคฆ

wet breach
#

the ones I want to make are of things that no one else really talks about

echo basalt
remote swallow
#

reflection?

wet breach
#

Or the appropriate way to use some things

echo basalt
#

you'll have like 350 niche videos

#

on how to wrap collections

wet breach
#

don't care, niche is what I am going for ๐Ÿ˜›

echo basalt
#

for that one developer named illusion

ivory sleet
#

You talking about reactive programming and principles like humble objects? Or wym exactly by coding styles (just curious)

echo basalt
#

that sometimes likes to be adventurous

#

and extend a LinkedList

#

so I don't need to have fields in my class ๐Ÿ‘

wet breach
ivory sleet
#

Ah

wet breach
#

but, no one really gives information on this either

ivory sleet
#

Myea, those kinds of scenarios would be interesting to have a little bit more insight into

echo basalt
#

make sure to record it with the shittiest mic

wet breach
#

well the headset I have better not be shitty

#

cost nearly $400 for it

echo basalt
#

mans got the apple headset

wet breach
#

no

#

I don't touch apple products

echo basalt
#

or some stupid astro headset

#

that looks like a kanye shoe

wet breach
#

steelseries

remote swallow
#

apple is shit af

echo basalt
#

respectable

#

I still prefer external mics and a good pair of headphones

#

but I got literally 3$ to my name and can't buy a good pair of headphones

#

stuck with this corsair headset whose cable is too long and keeps making me fall

wet breach
echo basalt
#

ANC for gaming lmfao

#

so you can finally drown out your wife/mom screaming in the back calling you a useless sack

wet breach
#

lol

wet breach
#

or talking about JVM things

#

like for those who love to optimize

viscid lotus
#

type: single, right or left

hardy swift
#

Hi guys im new to paper plugins. It's my first time using kotlin and i tried to make some simple listeners with help of tutorial, the one I made was for detecting jumps. Even tho my code is 100% the same i get error code while running it on the server. Plugin is loaded properly but it makes errors. If you think you could help pls dm me

vocal cloud
#

?ask

undone axleBOT
#

If you have a question, please just ask it. Don't look for staff or topic experts. Don't ask to ask or ask if people are awake or available. Just ask the question to the channel straight out, and wait patiently for a reply. Make sure you use the right channel regarding the topic of your question. Create a thread in case the channel is already in use!

remote swallow
#

?paperdev

undone axleBOT
#

Make sure to ask in the appropriate server concerning development towards different JAR types such as PaperMC. (Tip: Google them!)

vocal cloud
#

So many things wrong with that statement. DMs, Paper, No info on the error. Sigh

hardy swift
#

it's too long

remote swallow
#

?paste

undone axleBOT
hardy swift
remote swallow
#

ive got no idea if there is any kotlin devs even in here so its probably best to head to the paper discord

hardy swift
#

Ok thx man

vocal cloud
#

Looks like an issue with Kotlin either not being shaded in or a dependancy?

hardy swift
#

wdym?

echo basalt
# viscid lotus help
Block block = ...;

BlockData blockData = block.getBlockData(); // you might need to route this through the state

if(!(blockData instanceof Chest chest)) { // import org.bukkit.block.data.type.Chest, not org.bukkit.block.Chest
  return;
}

Chest.Type type = chest.getType();
viscid lotus
#

Thanks

tardy delta
echo basalt
#

that's the other chest

#

that stores the inventory

tardy delta
#

oh heh

echo basalt
#

// import org.bukkit.block.data.type.Chest, not org.bukkit.block.Chest

#

blind mf

tardy delta
#

whats this one then

#

i just saw

#

just a type holder ๐Ÿค”

quaint mantle
tardy delta
#

because that method has as return type boolean

quaint mantle
#

what would happen if i just put return;

#

without true

tardy delta
#

compiler error

echo basalt
#

try it and see

tardy delta
#

?learnjava

undone axleBOT
quaint mantle
#

what about false?

tardy delta
#

returning false in this case would print the command usage message to the sender

echo basalt
#

returning false, on this particular method, will just print the usage defined in the plugin.yml to the sender

tardy delta
#

blind mf

#

lmao

quaint mantle
#

me?

tardy delta
#

nah

echo basalt
#

nah we playing

tardy delta
#

sorry i had to

echo basalt
#

im not blind im slow

tardy delta
#

luv u

echo basalt
#

it's different

#

imma get full nitro just to spam demonic clown emotes

remote swallow
tardy delta
#

have fun ig

echo basalt
#

check dms

tardy delta
remote swallow
quaint mantle
#

when is it useful to return false in the onCommand method

#

is it ever?

wet breach
#

when you want it to show the command error message/usage

#

I typically always return false at the end of my command methods because then it means something wasn't accounted for and not caught by one of the conditions that would return true

quaint mantle
#

@remote swallow bro P-Lifesteal plugin ma heart Ka recipe kya hai

remote swallow
#

What?

wet breach
#

yeah the above ^

quaint mantle
#

@vagrant stratus bro P-Lifesteal plugin Ka heart Ka recipe kya hai please say me the recipe of heart in P-Lifesteal

remote swallow
#

Why are you just pinging random people asking something they dont understand

wet breach
#

maybe next they ping Choco ๐Ÿ˜„

remote swallow
#

I love that they ping me and staff

onyx fjord
#

does anyone have an util to draw particle line between locations?

#

my vector is a little messed up XD

onyx fjord
#

wait wait i think i got it

#

my logic was reversed

#

but the particle is messed up (it just flies around), how did you set it so that particle doesnt move

echo basalt
#

add a ton of 0.0.0.0.0

#

spawnParticle(particle, location, 0, 0, 0, 0)

#

type deal

onyx fjord
#

and what is extra for?

echo basalt
#

speed

onyx fjord
#

๐Ÿ‘

echo basalt
onyx fjord
#

now it uh kinda falls

#

im using PORTAL btw

echo basalt
#

idk

#

I haven't done particle work in a while

#

we have a dedicated vfx guy working on our particle & model engine

onyx fjord
#

i need to sit down and write utils for all that crap so i can forget about it

echo basalt
#

and my particle line engine is a bit over the top

#

it applies workload distribution and was made for client-sided minigames

onyx fjord
#

is there a chance a particle has hardcoded physics?

echo basalt
#

doubt

#

as long as you're setting all values to 0

#

Most particles should one

#

I remember flame being wonky but I got it to work somehow

#

lava and water drip downwards

#

so that's hardcoded

#

portal? idk

#

yeah portal falls downward

#

try using reverse_portal

onyx fjord
#

๐Ÿ˜„ work

#

W thanks

torn badge
#

Does anyone know how Block#getDrops behaves in BlockBreakEvent? It's giving me different drops just when calling it multiple times

#

And often none of both match the actual dropped items

quaint mantle
#

how do i get the damaged entity in the EntityDamageByEntity event?

tardy delta
#

getEntity()

quaint mantle
#

ty

onyx fjord
#

Variable used in lambda expression should be final or effectively final what dis

#

(bukkit task)

eternal night
#

you cannot use a variable that mutates after you create a lambda/inner class/etc that captures it

onyx fjord
#

so i must use atomic?

#

thats what ij tells me

eternal night
#

well either that

#

you ur you just create a final copy

#

unless you explicitly want to mutate that

#

then yea, atomic

tardy delta
#

or a one elem array

#

looks terrible but ye

echo basalt
#

I just have a reference class

#

basically an AtomicReference

#

but it really depends, most of these cases can be avoided (using for loop instead of forEach, avoiding streams etc)

echo basalt
#

Haven't used them this year

#

Mostly because they're just reinventing the wheel

tardy delta
#

you will be disgusted when looking at their impl

grizzled bridge
#

How can I create a team with command and set custom prefix in tab?

icy beacon
#

why is my table misaligned and has no borders? (my first time using tables in javadocs lol)

tardy delta
#

css in javadocs :stonks:

glad prawn
#

:stinks:

white dew
#

Hiiii guys, I need a suggestion OwO

#

I'm making a plugin with a lot of weird cursed things, and on of them is that you can milk any entity to gain a type of power

#

Its gonna be used for matches, like in manhunt

#

For now, you can milk chicken and gain slow falling, milk pigs and gain the ability to shoot pigs, that give slow to players, and milk sheep so you can eat grass

#

Now I wanna do some type of power associated with cows

#

I know they already have a default milk ๐Ÿ˜… but Its kinda of boring

#

What would be a cool cow power?

#

Help me brainstorm please

#

XD

tardy delta
#

summon a creeper when you try to milk a cow

white dew
#

thats creative

#

but I want something to help the player

#

Haha

glad prawn
white dew
#

hmmm... that may be a good idea

#

but idk, the sheep milk makes you able to eat grass

#

so I think It would be kind of repetitive

glad prawn
#

Xd

white dew
#

unless wheat does something special

#

instead of hunger

echo basalt
#

cows give a milk gun

#

you shoot your white substance at other players for extra damage and poison effect

white dew
#

it may be a good idea :o

#

You will also be able to milk blocks, btw ๐Ÿ˜Ž

#

milking bedrock will give you extra armor

#

and unbreaking on tools

tardy delta
#

milk the slime block for a thicc slimy substance

white dew
#

๐Ÿค”

#

...slimeballs? ๐Ÿคจ

tardy delta
#

oh thats a thing too

icy beacon
#

nevermind, I was just confused, they are indeed aligned, but the spacing is so small i didn't even notice lol

dry forum
#

why is there no config.getConfigurationSection("x") in bungeecord?

sterile token
#

why getUID()? Instead of getUUID()

chrome beacon
dry forum
#

is .getSection the same as configsection?

sterile token
#

If im not wrong

#

I havent used Bungee api since 1y tho

dry forum
#

theres also no paramaters for also .getKeys() so does it get like getKeys(true) or false?

dry forum
#

i cant rly test rn since my plugin doesnt have any commands or anything

dry forum
#

hard to explain

sterile token
#

You can always harcode to test things

#

๐Ÿค”

#

I dont know if you want to mean that or not

round finch
#

SQL Note for @round finch ping

#

oopsi wrong ping ign

hard ether
#

does anyone have development configurations for IntelliJ? I'm new to java and really need examples/correctly setup files

chrome beacon
#

Use the Minecraft Development plugin

#

It can setup the project for you

sterile token
#

Also i would recomend some plugins: Material icons, Git plugin (In case you use git), and some others

#

Let me open Intellij and figure which plugins i use tho, i think they are around 25-30 plugins

chrome beacon
#

You really don't need to customize things that much

sterile token
#

Yeah agree

#

But if you will work with it for hours, you surely will need it

hazy parrot
#

Doesn't intellij have integrated git support?

#

Pretty sure I don't have any plugin for it

chrome beacon
#

It does

old kettle
#

There is any way to set the font for Bossbar, as I know, SpigotAPI doesnt support TextComponent for Bossbar yet?

sterile token
#

I added a plugin which is pretty much similar to github platform but from IDE and enable git support (if you have the git program already installed)

#

PlayerItemDrop if im not wrong

#

You can also use the javadocs, to see all the api events, which methods they have, etc

heavy hamlet
#

could anyone help me with a egg swaper when u throw a egg at a player, u swith spots will anyone help?

sonic barn
#
Location npcLoc = this.npc.getBukkitEntity().getLocation();
Location targetLoc = tree.getWoodLoc().get(1);

npcLoc.setDirection(targetLoc.subtract(npcLoc).toVector());

float yaw = npcLoc.getYaw();

ServerGamePacketListenerImpl ps = ((CraftPlayer)player).getHandle().connection;
ps.send(new ClientboundRotateHeadPacket(this, (byte) ((yaw%360)*256/360)));

why does it work everyone else, but not me ? ๐Ÿ˜ญ
i'm trying to npc look at something... and it works maybe in 2 locations otherwise it rotate head up and down... even when im going around it

earnest forum
#

theres 2 packets

#

you need

#

to make an npc fully rotate

#

youtube tutorials tell u that

sonic barn
#

yeah you mean this
ps.send(new ClientboundMoveEntityPacket.Rot(this.getBukkitEntity().getEntityId(), ((byte) ((pitch%360)*256/360)), ((byte) ((yaw%360)*256/360)), false));

earnest forum
#

yes

sonic barn
#

i have it there

#

still

earnest forum
#

wait so whats the problem

sonic barn
#

just the head going wrong

earnest forum
#

inverted?

sonic barn
#

well... it goes up and down ๐Ÿ˜„

#

even when im going around it

earnest forum
#

so it doesnt move the body

#

just the head?

sonic barn
#

but it goes around too ๐Ÿ˜„ idk how to say it .... im going around and it goes slowly up and around same time xD

sonic barn
#

it doesn't move the body ... I didnt notice that ๐Ÿ˜„

dry forum
#

how would i run a console command on a specific server w/ bungeecord

river oracle
#

Can probably do this with plugin messaging channels

#

There are good tutorials on the forums for this

dry forum
#

havent seen any

river oracle
#

Your just doing a bad job googling then

sterile token
#

But PMC (Pluging Messaging Channel) would not be the best way, cuz the command wont be executed if there is no online players

sonic barn
#

here is quick video about what it doing

sterile token
#

Video is down

sonic barn
#

oh

#

wait ๐Ÿ˜„

sterile token
#

Oh no

#

Nothing is okay

#

Its just shity platform issues

sterile token
sterile token
#

Sorry mate

#

The video was okay

sonic barn
#

okay ๐Ÿ˜„

sterile token
#

Its just discord platform which doesnt pre load/display them on the chat

#

Sorry for losting your time tho

sonic barn
#

don't worry ๐Ÿ˜„ its okay

sonic barn
hybrid spoke
sonic barn
#

but I'll take a look of course ๐Ÿ˜‡

gaunt moss
#

Hi! On my plugin I force the player to return to spawn when he dies, is it better to use the DeathEvent or RespawnEvent?

twilit roost
#
    @EventHandler
    public void onPlayerPickupItem(PlayerPickupItemEvent e){
        Player p = e.getPlayer();
        if(Pirate.getPirate(p).isHoldingLoot()){
            e.setCancelled(true);
            return;
        }
        SlotLock sl = SlotLock.getLock(p);
        Loot loot = LootManager.getLoot(e.getItem().getItemStack());
        if (loot == null)
            return;

        ItemStack item = loot.getItem();
        p.getInventory().setItem(8,item);
        sl.forceSlot(8);
        e.getItem().remove();
    }

this somehow always gives me the item w/ amount + 1

vivid skiff
#

s

gaunt moss
trim creek
#
@EventHandler
    public void onInteract(PlayerInteractEvent e) {
        if (e.getAction() == Action.RIGHT_CLICK_BLOCK && e.getClickedBlock().getType() == Material.OAK_SIGN || e.getAction() == Action.LEFT_CLICK_BLOCK && e.getClickedBlock().getType() == Material.OAK_SIGN) {
            // events
        }
    }

I am a complete dumb. .-.
What I want to reach is when a player clicks a sign, it should execute the event. Should I locate the sign with a Location (Bukkit.getLocation())?

jolly gust
#

how to make a placeholder in the config.yml ?

trim creek
#

wha

twilit roost
#

wdym placeholder in config

tardy delta
#

%player%

#

just use String::replace if thats what youre lookin for

trim creek
#

if you mean PlaceholderAPI support, read the PAPI Wiki

twilit roost
#

and just replace("%player%,"x")

sterile token
tardy delta
#

replaceAll is for regex

sterile token
#

Oh ok

#

My bad

jolly gust
tardy delta
#

lol

sterile token
tardy delta
#

a cpu is fast enough to handle that

twilit roost
#

well than you should do your own string parser
if .replace is computing heavy

jolly gust
#

OK, how do I do this if I get a list of strings?

twilit roost
#

just load your string with replaced placeholder to memory
and access it everytime u need
no need to .replace it everytime

twilit roost
sterile token
twilit roost
#

and replace every string

#

but when I dropped 4 items, I picked up 5

trim creek
#

tried commenting setamount?

sterile token
trim creek
#

(yes make it comment if not yet tried)

twilit roost
sterile token
#

?di

undone axleBOT
jolly gust
trim creek
sterile token
trim creek
#

xd

jolly gust
#

result of string s is ignored

trim creek
#

then aswner is no

sterile token
#

I mean, sorry if i sound rude but have you learn basic java?

sterile token
#

Oh ok, sorry for asking my bad

jolly gust
#

just tell me what to add please

trim creek
twilit roost
tall dragon
trim creek
jolly gust
tall dragon
#

you could probably do that with a stream

#

but its the same result

#

that will also make another list

round finch
trim creek
trim creek
round finch
#

that is your choice!

#

remember to check if the block is sign

#

cast Block to sign

trim creek
#

-suddenly trying to remember how to do that lol-

tall dragon
round finch
#

is it not check if block is instanceof sign?

twilit roost
trim creek
tall dragon
#

block#getState() instanceof Sign

#

and then cast it to this

trim creek
#

ah yes now it works

#

Thanks :D

#

-checking console-

#

CraftPlayer{name=NeonOwlGery} - aww man.. xd

#

(jk i know how to fix)

hybrid spoke
round finch
#

teaching myself sql ๐Ÿ˜จ

#

totally noobie

sterile token
round finch
#

idk how the sql logic works

#

or tables

sterile token
#

oh ok

#

let me explain really simple about tables

#

table is like a record where you just store key-value pairs

round finch
#

someone said to me it is kinda like execl

sterile token
#

yeah pretty much

kind ridge
#

Excel is a good comparison.

#

You have columns that define what kind of data goes in the table, then each row is a record with data in those columns.

round finch
#

not sure how to make arrays

sterile token
sterile token
white dew
#

Hi guys, do you know how to check if an item is a food item? I thought there would be some time of ItemStack subclass like FoodItem, but apparently It does not

round finch
#

like

UUID
Kills

sterile token
#
sterile token
#

And kills im not sure how should, be i havent used sql since 2021

round finch
#

hmm naruSmile thinkies

sterile token
#

foreign keys are used to make relations

round finch
#

kills like a int

#

isn't that just specification?

sterile token
#

Something like that

round finch
#

woah nice key!

sterile token
#

There many types of relations tho

#

1 to 1, 1 to many, many to many

rough drift
#

on bungee, does ServerConectEvent get called if you attempt to connect to an offline server?

sterile token
red sedge
#

is there anyway to update a static variable from an inherited class statically-

sterile token
red sedge
#

does that even make sense

#

uh

#

so

sterile token
#

I ask because many ppl these days are using static for things which they are not neccessary to

#

I know that static should used mainly for utility things - If im wrong correct me please

undone kernel
#

I wanna know if there's a shorter way to do this java ItemStack item = p.getInventory().getItem(0); ItemMeta itemM = item.getItemMeta(); itemM.removeEnchant(Enchantment.ARROW_DAMAGE); itemM.removeEnchant(Enchantment.ARROW_FIRE); itemM.removeEnchant(Enchantment.ARROW_INFINITE); itemM.removeEnchant(Enchantment.ARROW_KNOCKBACK); itemM.removeEnchant(Enchantment.DAMAGE_ALL); itemM.removeEnchant(Enchantment.DAMAGE_ARTHROPODS); itemM.removeEnchant(Enchantment.DAMAGE_UNDEAD); itemM.removeEnchant(Enchantment.DIG_SPEED); itemM.removeEnchant(Enchantment.DURABILITY); itemM.removeEnchant(Enchantment.FIRE_ASPECT); itemM.removeEnchant(Enchantment.KNOCKBACK); itemM.removeEnchant(Enchantment.LOOT_BONUS_BLOCKS); itemM.removeEnchant(Enchantment.LOOT_BONUS_MOBS); itemM.removeEnchant(Enchantment.OXYGEN); itemM.removeEnchant(Enchantment.PROTECTION_ENVIRONMENTAL); itemM.removeEnchant(Enchantment.PROTECTION_EXPLOSIONS); itemM.removeEnchant(Enchantment.PROTECTION_FALL); itemM.removeEnchant(Enchantment.PROTECTION_FIRE); itemM.removeEnchant(Enchantment.PROTECTION_PROJECTILE); itemM.removeEnchant(Enchantment.SILK_TOUCH); itemM.removeEnchant(Enchantment.THORNS); itemM.removeEnchant(Enchantment.WATER_WORKER);
ps : this is 1.5.2

red sedge
#

actually

tardy delta
#
static {
  BaseClass.SOME_STATIC_VAR = 1;
}```
that?
red sedge
#

o

#

maybe

round finch
undone kernel
tardy delta
#

it gets called when that subclass is loaded

rough drift
#
for(Enchantment ench : Enchantment.values()) {
  itemM.removeEnchant(ench);
}
undone kernel
#

ok thank you

round finch
#

it isn't much practical..

to copy and pasting like many times

loops is cleaner and better

white dew
#

Hey guys, I'm making a thing where you get plus 4 food levels when you eat something, however, since you can also consume milk, and potions, etc, I'm getting these extra food levels on them as well

#

I want to be able to check if item is a food item

sterile token
tardy delta
#

wanted to look into CraftMetaItem but its horrible in there

sterile token
undone kernel
sterile token
#

YOU musnt be using an api, without knowing the basis from the lang

#

Sorry for uper cases letters discord is weird it does what his fkng ass want

undone kernel
#

well i kinda already know alot of spigot now ;- ;

#

and i'm to lazy to learn full java

sterile token
undone kernel
#

i'll just learn as I go

sterile token
#

ok

undone kernel
cyan trout
#

How do I set the Name above head ? 1.8.8

sterile token
#

?1.8

undone axleBOT
round finch
#

woah!

#

then did spigot take over

sterile token
# undone kernel it's a little to late

I say it as personal opinion cuz you wont understand when ppl explain smth it will sound really technical for you and wont udnerstand it. Also it will be really diff for you to code without knowing the most important things about the lang

round finch
#

instead of bukkit?

sterile token
#

shity discord i cannot toggle out the reply pings i need to do it on every reply

round finch
#

just thinking about the old versions

undone kernel
sterile token
round finch
#

i have pings turned off lmao

sterile token
round finch
#

people are sensitive wus

#

on discord sometimes

#

if you dont like pings just turn it off lmao

#

dont just get mad at random people

sterile token
#

Opinions?

round finch
#

this lib seems cool!

undone kernel
#

alr i got one more code that I wonder how it can be shorter

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player) {
            Player p = (Player) sender;
            if (sender.hasPermission("eagle.multisummon")) {
                if (args.length >= 2) {
                    try {
                        EntityType entity = EntityType.valueOf(args[0]);
                        int amount = Integer.parseInt(args[1]);
                        for (int i = 0; i < amount; i++) {
                            p.getWorld().spawnEntity(p.getLocation(), entity);
                        }
                        p.sendMessage(colorize("&aYou've spawned &e" + args[1] + " " + args[0] + "s"));
                    } catch (IllegalArgumentException e) {
                        p.sendMessage(colorize("&4This is not an entity."));
                    }
                } else {
                    p.sendMessage(colorize("&e/multisummon [mob] [amount]."));
                }
            } else {
                p.sendMessage(colorize("&4You don't have permission to do this."));
            }
        } else {
            sender.sendMessage(colorize("&4You cannot do this. "));
        }
        return true;
    }```
sterile token
#

Some code ideas, where taken from Ilussion private library

dusk flicker
#

I like it, but personally id have the MenuAPI object closer to the top so you arent doing a ton of library.getApi

round finch
#

good freaking idea!

#

having a private lib api!

sterile token
#

Im wondering to it public

#

Because i havent seen such a simple menu api

dusk flicker
#

Theres a few simple ones, not really maintained tho

sterile token
#

Also them i can use it asa portfolio project

dusk flicker
#

It's deprecated but this is what I used for a while for paginated guis at least

round finch
#

simplifying things awesome!
great for new people or laziness + efficiency

dusk flicker
#

laziness always wins

#

lol

round finch
#

yeah saving energy! ๐Ÿ™‚

sterile token
#

Also its pretty much well organized

undone axleBOT
round finch
#

it looks like a mess in discord thb

drowsy helm
#

instead of heaps of nested statements

white dew
#

Is there a way for me to make so a mob doesn't drop any items?

#

I have a skill that makes the player able to spawn pigs and launch them

#

but I don't want them to abuse It for free food

tardy delta
#

doing everything with a library object?

kind hatch
drowsy helm
icy beacon
#

it's not readable lmao

drowsy helm
#

its unreadable

icy beacon
#

you can't extend it at all

#

unless you want a lot of pain

dusk flicker
#

I could see people wanting to create the MenuItems and PaginatedMenu objects with actual objects, not MenuAPI#newMenu etc

undone kernel
drowsy helm
#

yes it's not a matter of if you do or don't

#

it's just good programming practice and will make your code shorter

dusk flicker
undone kernel
#

also this is my only code that has turned out as a arrow

round finch
#

MenuAPI.Delete ("menu")

top laziness

icy beacon
#

if not then please refactor it

#

thought you came here for advice

undone kernel
icy beacon
#

this will... make it... shorter

dusk flicker
#

shorter code does not make it better

icy beacon
#

or more specifically, thinner

dusk flicker
#

Cleaner code is what you want

icy beacon
#

^

undone kernel
icy beacon
#

bro

#

whatever

tardy delta
#

my menu lib lol

dusk flicker
echo basalt
#

works a bit similar to yours

round finch
#

Add an inventory Solver ๐Ÿ™‚

echo basalt
#

but it's just... more polished

dusk flicker
#

oh lol

echo basalt
#

instead of addListener it's like

#

onClick(event) or onClickAction(player)

tardy delta
dusk flicker
#

I never planned for mine to be released, I just got so fucking tired of making stupid guis lol

echo basalt
#

you can set all events to cancel automatically

#

placeholers and all

sterile token
echo basalt
#

ehh

#

not really

dusk flicker
#

lol

echo basalt
#

well technically you can but I'm not willing to go into a deep conversation about my menu util

#

as I am planning on making a v3 which basically turns my menu util into a very low-resolution graphics engine

sterile token
#

its not for asking help nor fucking up, i just want to ask something private and see if you agree or not

drowsy helm
#
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!(sender instasnceof Player player)) {
      sender.sendMessage(colorize("&4You cannot do this. "));
      return true;
    }
    if (!sender.hasPermission("eagle.multisummon")) {
      p.sendMessage(colorize("&4You don't have permission to do this."));
      return true;
    }
    if (args.length < 2) {
      p.sendMessage(colorize("&e/multisummon [mob] [amount]."));
      return true;
    }

    try {
      EntityType entity = EntityType.valueOf(args[0]);
      int amount = Integer.parseInt(args[1]);
      for (int i = 0; i < amount; i++) {
        p.getWorld().spawnEntity(p.getLocation(), entity);
      }
      p.sendMessage(colorize("&aYou've spawned &e" + args[1] + " " + args[0] + "s"));
    } catch (IllegalArgumentException e) {
      p.sendMessage(colorize("&4This is not an entity."));
    }

    return true;
    }```
#

look how much nicer that is

tardy delta
#

<insert command framework here>

echo basalt
#

just make your own

drowsy helm
#

without a framework

tardy delta
#

always looks horrible

echo basalt
#

eh

dusk flicker
#

that wont even work will it?

echo basalt
#

still

#

some room for improvement

#

like p -> player

dusk flicker
#

yeah

echo basalt
#

you do cast it as player

echo basalt
#

but then name it as p

tardy delta
#

where abstract baseclass too

#

๐Ÿฅน

echo basalt
#

also

dusk flicker
#

command frameworks are the best

echo basalt
#

quick flaw I noticed

tardy delta
#

didnt know this emote existed lol

echo basalt
#

pass in an invalid amount

#

and it will say invalid entity

icy beacon
#

switch to acf this instant

drowsy helm
#

yeah acf will make that much nicer

dusk flicker
#

or any framework

icy beacon
#

yeah

#

acf is just fun

dusk flicker
#

ive been meaning to redo my command framework at some point

tardy delta
#

acf be like

dusk flicker
#

I like it but some parts of it I dont like

rough drift
#

can I check if a server is online in bungeecord?

icy beacon
dusk flicker
#

you have to ping it iirc

rough drift
#

How can I do so?

sterile token
#

acf is fkng painfull and also bloads your pl, from being 4.23mb full core, to being 6.70mb

icy beacon
#

you have to ping it iirc

echo basalt
#

acf is a bit too wasteful

#

I still need to polish my framework to auto-validate wildcards n all

sterile token
drowsy helm
#

Yeah I dont like how it makes you shade it

tardy delta
#

i had so much issues with it cuz the docs are trash

icy beacon
#

if you had 4.2mb this is rather fine

icy beacon
echo basalt
#

140kb is rather small

tardy delta
#

same

icy beacon
#

because of it being polluted

#

but if you already have 4.2mb, acf is not much more

echo basalt
#

also the 4.7mb the guy referred are probably other shaded deps

#

and by 140kb is kinda small

icy beacon
#

++

echo basalt
#

I mean in terms of code size

icy beacon
#

yeah

echo basalt
#

not including shaded code

drowsy helm
#

But still command context is great

#

Removes so much boilerplate

icy beacon
#

agreed

tardy delta
#

custom senders good too

sterile token
echo basalt
#

do you are have stupid

icy beacon
#

uh yeah thanks cap

sterile token
icy beacon
#

wtf are you even talking about why tf did you bring up 14mb

sterile token
#

wait

tardy delta
#

๐Ÿค”

sterile token
#

im stupid tho

icy beacon
#

yeah you are have stupid

#

:wobbly_face:

sterile token
#

I write what ever on the conversor

#

I mean full core shaded with mongo and some custom libraries is 4.23mb and the same core but adding acf is 6.70mb

tardy delta
#

my stuff shaded is 2600kb

round finch
#

from smallest to larger

river oracle
#

Brontobyte

icy beacon
#

what the fuck is a nibble

tardy delta
#

half byte

icy beacon
#

why

dire salmon
round finch
#

wait a sec

#

feck this table

tardy delta
#

thers a word too (16 bit)

icy beacon
round finch
#

(โ•ฏยฐโ–กยฐ๏ผ‰โ•ฏ๏ธต โ”ปโ”โ”ป

icy beacon
#

โ”ฌโ”€โ”ฌ ใƒŽ( ใ‚œ-ใ‚œใƒŽ)

round finch
#

nibble sounds funny

icy beacon
#

yeah

sterile token
tardy delta
#

cuz 1024 bits which go from 0 to 1023?

sterile token
#

oh my bad, that why i always say im really bad with maths

round finch
#

pc counts from 0

#

humans nah feck that 1,2,3

trim creek
#

did Java 17 just mess up how I can get a string out of the config?

pallid oxide
#

shouldnt

round finch
#

do you mean yaml?

trim creek
#

Yes

#

like

sterile token
#

The most annoying one is the @urban grotto

trim creek
#

I wanted to get a sting "General.Data.Players.AllowChat"

#

(yes I use strings instead of booleans)

sterile token
trim creek
#

result? chat got disabled until I removed the feature, as of "chat was disabled"

round finch
#

show getter

#

and config file

trim creek
#

if (plugin.getConfig().get("General.Data.Players.AllowChat").equals("true")) {

#

config file completely contains the same value lol

#

basically if value is true, chat should be enabled

#

and if false

#

chat should be disabled

#

result? chat is always disabled lmao

tardy delta
#

nullable

trim creek
#

feature got disabled

round finch
#

getBoolean?

kind hatch
round finch
#

๐Ÿ˜

trim creek
#

mmm nevermind I just set it to getString

#

now it works

trim creek
#

don't ask why

#

personal opinion

#

๐Ÿ‘€

kind hatch
#

???

#

I swear

trim creek
#

I SAID DON'T ASK WHY!!! ๐Ÿ˜น

round finch
#

โœ๏ธ

#

very questionable

trim creek
#

I hate them returning null... ๐Ÿ‘€

#

so no usin' booleans

#

booleans be dead

#

null be dead

kind hatch
#

What kind of booleans are you using then? lmao

round finch
#

it only returns null

kind ridge
#

Youโ€™re basically using a boolean with extra steps. Just use a boolean.

round finch
#

if it is can't get it

trim creek
round finch
#

if null

set Line

tardy delta
#

sigma rule: dont trust anything

trim creek
#

+1

#

lmao

tardy delta
#

especially dont trust booleans

#

they always tend to have two sides

round finch
#

we're living in simulation

tardy delta
#

lets break out

round finch
#

๐Ÿคฃ

trim creek
#

mmmm

round finch
#

Making fun of Denying objectivity

trim creek
#
if (people.liveIn(simulation)) {
  people.escape;
}
round finch
#

people object

trim creek
#

ye we all object

#

holy crap this sounds not-english at all

white dew
#

I'm making a plugin for manhunts, except everything is either cursed or funny. I need some cursed ideas for It

#

Haha

#

for now you can Milk any entities and there is water in the nether

#

oh, and milk BLOCKS

#

you gain powers with the different types of milk

#

But I want to add more cursed stuff

sterile token
alpine cairn
#

You hold the bow backwards and can only shoot yourself

white dew
#

Ahahahaha

#

that would be cursed

#

:o

sterile token
#

Didnt you ask that already some weeks ago?

trim creek
#

once you break a tnt block

#

it isntantly explodes

#

useful in desert temples

sterile token
#

Yeah he is reposting the text

trim creek
#

or in escape runs

sterile token
white dew
#

Noooo, I asked for milking ideas

#

now I'm asking for general ideas

#

but I'm glad you remembered!!

alpine cairn
#

If a spider hits you it gives spider vision

#

Water flows up

white dew
#

WAIT, is there a way to actually make that????

trim creek
#

like as said make tnt explode instatnly upon destroying

white dew
#

like

#

spider vision

alpine cairn
#

It is already in the game

trim creek
#

or make all villager gollams attack you instantly

trim creek
#

no matter what

white dew
#

Haha, thats funny

#

I like that!

trim creek
#

or make a 10 minute loop

#

that will always spawn some random mobs upon ALL players

alpine cairn
#

If you spectate from the perspective of a spider, enderman, or creeper you see through their eyes

white dew
#

oooooh

trim creek
#

it can be fishies, tnties, iron gollamies, anythingies

#

once the hunted one wins

#

he gets killed by fireworks

dire salmon
#

i made a gui, that when a player clicks an item it starts a task for the player using BukkitScheduler. how can i make it stop when the player clicks other item?

alpine cairn
#

The compass for the manhunt only points in the exact opposite direction of the hunted

white dew
#

ahahahaha

#

nice

round finch
#

Make Random Events

round finch
#

:)

white dew
#

Thank you, these are some great ideas you guys are suggesting

trim creek
#

which ofc can be ABSOLUTELY ANYTHING

alpine cairn
#

All pants and leggings are worn in the head slot

tardy delta
#

ender dragon spawning in front of you

white dew
#

that would be so epic

trim creek
alpine cairn
#

The crafting table and furnace recipes are reversed

trim creek
#

not just epic but very funny as well ๐Ÿคฃ

white dew
#

Hahaha

trim creek
#

Imagine being inside the mines, and a random ender dragon spawns above you ๐Ÿคฃ

white dew
trim creek
alpine cairn
#

Yep

#

I've seen plugins that add and remove recipes

#

So you must be able to change their output

trim creek
#

o.o

white dew
#

yeah, you can

#

Its a crafting event

#

very cool

round finch
#

i have done it in the past

#

for anvils, craftingtable and... etc

trim lake
#

How can I make clickable only part of TextComponent? I tried something, but format stay and second part still have Hover and Click event. public static TextComponent sendMsg(String text, String cmd) { TextComponent changeName = new TextComponent(text); changeName.setColor(ChatColor.GRAY); changeName.setItalic(true); changeName.setUnderlined(true); changeName.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(text).color(ChatColor.GRAY).italic(true).create())); changeName.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, cmd)); String testText = " test"; changeName.addExtra( new TextComponent(ChatColor.RESET + testText) ); return changeName; }

sterile token
tardy delta
#

ComponentBuilder

trim lake
#

I tired that isnยดt I? I mean this: changeName.addExtra( new TextComponent(ChatColor.RESET + testText) );

worldly ingot
#

You should use the component builder for that whole thing. Child components inherit formatting and events from their parents, but you can change that behaviour more easily with the builder

    public static BaseComponent[] sendMessage(String text, String command) {
        return new ComponentBuilder(text)
            .color(ChatColor.GRAY).italic(true).underlined(true)
            .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text(
                new ComponentBuilder(text).color(ChatColor.GRAY).italic(true).create()
            )))
            .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command))
            .append(" test", FormatRetention.NONE)
            .create();
    }```
#

(the FormatRetention.NONE is what tells it to not take events or formatting)

trim lake
#

I tired this and its working too. Im just stupid, I dont think that will inherit everything from base one.... TextComponent comp1 = new TextComponent("green"); comp1.setColor(ChatColor.GREEN); comp1.setUnderlined(true); comp1.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("toto je zelenรก").color(ChatColor.GRAY).create())); TextComponent comp2 = new TextComponent(" red"); comp2.setBold(true); comp2.setColor(ChatColor.RED); comp2.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("toto je ฤervenรก").color(ChatColor.GRAY).create())); comp1.addExtra(comp2); player.spigot().sendMessage(comp1); this is working to

#

what is better way?

worldly ingot
#

ComponentBuilder is easier, but either works, really

#

Plus one is a TextComponent, the builder produces a BaseComponent[]

#

(though practically all methods in Spigot take a BaseComponent[] anyways)

trim lake
worldly ingot
#

With a ComponentBuilder you can, yeah, because you're returning the result of its .create() method

#

You could in theory write that whole thing on one line, it just helps readability when you newline some of the calls

trim lake
worldly ingot
#

BaseComponent**[]**

#

It's an array. Worth keeping that in mind

trim lake
#

thanks for help, I hope I understand that now

round finch
#

sql table of tables?

sterile token
round finch
#

1 sec lemme draw it

trim lake
#

Didi I make something worng? BaseComponent[] testBuild = new ComponentBuilder("Hi") .color(ChatColor.YELLOW) .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("hover text").color(ChatColor.GRAY).create())) .event(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "click")) .append(" test", FormatRetention.NONE); player.spigot().sendMessage(testBuild);

sterile token
trim lake
sterile token
round finch
thorny marsh
#

Hey how to stop a scheduleSyncRepeatingTask

solid skiff
#

How would I use getConfig() in a different file that does not have extends JavaPlugin. Im getting an error when I start my plugin because I have 3 files using extends JavaPlugin

round finch
#

is this looking right?

glossy venture
#

top 10 diagram

glossy venture
#

what is the ?

#

in table?

#

and what is table

round finch
#

cus i got no clue..

trim lake
#

I gess so, If I look on bunge doc is looking like this: so it should have

glossy venture
#

how the fuck do i delete a directory it doesnt wororork with Files.walk because it liiek wlaks over the directoryies before theyre empty or something it throws error

#

rbrhyrburburburbrur

solid skiff
glossy venture
#

?di

undone axleBOT
trim lake
#

Got it.... .create() I need add in the end

#

My bad sorry.

solid skiff
glossy venture
#

and then when creating those instances from your plugin class you pass in this, so like new craftycore(this)

#

not in your main plugin class tho

solid skiff
dire salmon
sterile token
glossy venture
#

id assume where you create this instane

#

instance

solid skiff
#

variable plugin might not have been initialized

invalid way of declaration; return type required

glossy venture
#

can you show your code

dire salmon
sterile token
dire salmon
#

shouldnt be hard

solid skiff
#

do you want the whole thing?

dire salmon
sterile token
#

You should pass the class extending JavaPlugin

solid skiff
#

ah

glossy venture
#

true

sterile token
#

If not, you will only able to access JavaPlugin obj methods

solid skiff
sterile token
#

That doesnt exists thoยฟ?

solid skiff
#

getConfig().getString("Prefix") + ChatColor wdym

sterile token
#

i never seen that method

#

Is it new?

glossy venture
glossy venture
sterile token
glossy venture
#

weird

#

how did you hande configs then

sterile token
glossy venture
#

yeah same

#

but i do remeber using it in the begineen

#

beginning

solid skiff
#

Ok, how would I reload a config with a command,

#

how would I implement this into a commadn

#
if (sender.hasPermission("craftycore.reload")) {
                plugin.reloadConfig();
                sender.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("Prefix") + plugin.getConfig().getString("reload-message")));
                return true;
            } else {
                sender.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("Prefix") + plugin.getConfig().getString("no-permission")));
                return true;
            }
        }
        return true;```
something like this?
#

plugin.reloadConfig();

undone axleBOT
solid skiff
#

oh i havent fixed that in this file yet

#

the FileConfiguration config; or the File cfile; one

#

so both

#

ok

stoic osprey
#

I want to learn to make Minecraft mods, but I don't know where to start. I know java and programming, but not modding so I'd like to find a project idea to make.

solid skiff
#

where would I put @Override

#

implement is red

#

also ```Java
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (cmd.getName().equalsIgnoreCase("reload")) {
if (sender.hasPermission("craftycore.reload")) {
File file = new File(plugin.getDataFolder(), "config.yml");
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
plugin.reloadConfig();
for (String reloadmessage : config.getStringList("reload-message")) {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("Prefix") + reloadmessage));
}
return true;
} else {
sender.sendMessage(ChatColor.RED + "You do not have permission to use this command!");
return true;
}
}
return false;
}

something github copilot generated me, does it do the same thing?
#

in config yea

#

one string

#

FileConfiguration config = YamlConfiguration.loadConfiguration(file);
plugin.reloadConfig();
what would do this

#

idk copilot can be stupid

#

yea idk

#

anyway looks like it works

#

ty

thorny marsh
#

Hey, I have a question. I spawn particles that I want to slowly (clean) move to a location in x seconds, what is the best way to do this?

solid skiff
#

would the string list produce the string in the format of hello this is a list or would it do this:

hello
this
is
a
list
#

so the bottom one

#

ok good to know

#

er, so there is an error saying expected 1 args but found 0,
getCommand("Reload").setExecutor(new Reload());
this is when I register this command in the main class

trim lake
#

Is possible to use ChatColor.translateAlternateColorCodes in BaseComponent[]?

solid skiff
#

quick fixing it with intellij just breaks this.plugin = plugin; in the other one

glossy venture
#

yo i want to unload a world, replace the data and reload it again
i can see it copying the files, it copied some shitty text document and unloaded the world but when i join back the world data isnt there
heres a shitty 5fps video if youre wondering what is happening (the command i ran: /copyworld world1 world): https://streamable.com/d4hs7u

my code: (- the copying part but i know that works): https://pastes.dev/zHfueMCOUm

#

copying and deletion logs

solid skiff
sullen marlin
solid skiff
dusk flicker
#

also just a little nitpick on my part, you're adding just straight 'reload', while the game already has this as a command, one may overwrite the other

solid skiff
#

so what would i add

round finch
#

what event for killing entity?

solid skiff
#

getCommand("Reload").setExecutor(new Reload(this));

round finch
#

ty

solid skiff
#

I have the command be craftycore:reload, how would I change this into craftycore reload

dusk flicker
#

?args

#

that would be a useful command to add

solid skiff
#

ok

trim lake
sullen marlin
#

No it's a static method

#

The wiki page describes this

#

Use it instead of constructor

trim lake
#

I could not find that on wiki there is no searchbar

dusk flicker
sullen marlin
#

Google works too