#help-development

1 messages · Page 155 of 1

tardy delta
#

doesnt matter

remote swallow
#

they should remake that on spigot forums

onyx fjord
#

for past 10 years a lot was added

tardy delta
#

as long an api doesnt change

onyx fjord
#

hol on

#

?jd-s

undone axleBOT
ivory sleet
smoky oak
#

well ofc you can just check all known interfaces of event

#

good luck reading that block of text tho

ivory sleet
#

and then just CTRL + F and search for Event

echo basalt
#

update: here's the map colors

#

I hate this

ivory sleet
#

event.Event maybe, but some keyword that gets u down there

remote swallow
smoky oak
remote swallow
#

what was that meant to look like

smoky oak
#

particles ftw

#

even if i have to ddos someone to do it

echo basalt
#

original image

remote swallow
#

my god

#

mc needs full hex code support

smoky oak
#

it has

#

just not in maps

#

i can spawn you a dust particle in every color of the rainbow

echo basalt
#

imma try this image, looks more promising

#

would be useful to have a png version of it grr

smoky oak
#

open in paint

#

save as png

#

unless ur a linux user

#

in whic case

#

god help you

echo basalt
#

but then it won't have every color because it's already compressed

smoky oak
#

ah

red sedge
echo basalt
#

lemme find a version with blacks

#

yeah I hate this

onyx fjord
#

how can i get ExpBottleEvent orbs that spawned?

#

i need that info

red sedge
#

entityspawnevent?

red sedge
#

it does give it quite a style

#
  • it would probably make the already shitty performance of maps worse
#

if they added full rgb

smoky oak
#

cough 3d markers cough 2b2t cough

echo basalt
#

maps are decent enough

red sedge
#

theyre not

echo basalt
#

I mean

smoky oak
#

i mean

echo basalt
#

the way bukkit did it is weird

smoky oak
#

and yes its as bad as it looks

red sedge
#

3d markers do make sense tho

echo basalt
#

but if you optimize it yourself

#

is good

onyx fjord
#

which i need

red sedge
#

2d2t is just exploiting everything thats not a good place to judge mechanics

honest echo
#

how can i compare 2 item's enchants

red sedge
worldly ingot
#

As with a lot of things in Bukkit

#

It made sense at the time

echo basalt
#

needs to be revamped a bit

#

or at least like

#

drawImage method that writes directly to the buffer

#

setPixel is hella slow

worldly ingot
#

PRs are welcome

red sedge
#

Yeah but PRs are also terrifying

echo basalt
#

I'd rather not touch spigot code directly

#

if the code actually becomes good then it's no longer quirky and fun to use

worldly ingot
#

lol that's an interesting perspective, sure

remote swallow
onyx fjord
#

while u make pr add proper enchanting api plz

worldly ingot
#

Such as?

#

What needs adding?

onyx fjord
#

anvil support, grindstone, table, loot, villagers

#

lore

#

basically what vanilla has

worldly ingot
#

Yeah but like, how? That really doesn't explain much at all

red sedge
#

thats a lot of custom stuff tho

vocal cloud
#

@Since Tags sadge

onyx fjord
#

i dont enjoy handling everything myself

red sedge
#

Oh wait

#

I think they mean like

worldly ingot
#

Anvil? enchantments A + enchantments B.
Grindstone? clear enchantments
Table? Maybe a method to enchant an item would be neat. Make a JIRA ticket pls
Loot? idk what you mean
Villagers? I also dk what you mean

red sedge
#

Librarians being abhle to sell custom enchants etc

eternal night
#

I'd take kacpers API suggestions with a grain of salt xD

onyx fjord
#

villagers - enchant as a trade
loot - in structure chests

remote swallow
eternal night
#

what do you mean "enchant" as a trade

worldly ingot
#

Yeah I have no clue what you mean

onyx fjord
#

librarians sell them

worldly ingot
#

They sell enchanted books, yeah

#

You can make those

eternal night
#

and how is that currently not possible ?

#

yea

worldly ingot
#

EnchantmentStorageMeta

eternal night
#

there is API for that lol

red sedge
onyx fjord
#

whats the method for it

red sedge
#

so im confused w that part

worldly ingot
#

EnchantmentStorageMeta

fickle mist
#

Hi! I want to assign the variable staminaValue a value, that you get from somewhere

worldly ingot
#

It's an ItemMeta type

eternal night
#

this is why you take kacpers suggestion with a grain of salt

#

man is a legacy text format enjoyer

eternal night
#

nothing good comes from that 😭

remote swallow
#

?paste

undone axleBOT
onyx fjord
#

at least faster to do

worldly ingot
#

Only reasonable API suggestion thus far from the ones you listed is API to apply enchantments to an item at a specific level

#

Could throw that into ItemFactory probably

#

Maybe ItemMeta

red sedge
#

Yh tbh that sounds like a good suggestion

fickle mist
onyx fjord
#

like i wanted to make 1 simple enchant

#

logic was literalyl 4 lines

remote swallow
eternal night
#

that would need the entire enchantment table logic tho

worldly ingot
#

i.e. when you enchant an item at, say, level 30 at an enchantment table

#

Just a method to do that without the need for a table

onyx fjord
#

cant u do it easier in datapacks tho?

red sedge
#

didnt they mean like adding enchants to enchanting table lootable(?)

worldly ingot
#

Oh, well adding enchantments is a whole other issue

#

We can't even reasonably support that in Bukkit. Bukkit is vanilla-centric. I don't think datapacks can do that either

smoky oak
#

pft

#

id just make do with lore

worldly ingot
#

You can add an enchantment to the registry if you want, but the client has no clue what that enchantment is

tardy delta
#

this is two times the same isnt it? my brain is dying rn

eternal night
#

oh

worldly ingot
#

So in that regard it's not Bukkit's responsibility to add API for it

eternal night
#

paper already has a method for enchanting with a level

#

I knew I saw that logic somewhere

smoky oak
#

when i try to add stuff to the regestry it insults me

#

no such method: L()

worldly ingot
#

I avoid looking at Paper because I don't want my commits to be influenced at all ¯_(ツ)_/¯

eternal night
#

🙏

#

❤️

onyx fjord
#

no paper api

worldly ingot
#

If someone wants to make a JIRA issue for a method to enchant an item, go for it. Someone will get around to it in the near future I'm sure. I've been on a PR tear personally

#

(no mention of Paper in the JIRA issue if you do make one though. Again, as little influence as possible)

eternal night
#

oh btw thanks for ItemMeta#getAsString

onyx fjord
#

i dont have time to annotate every class with deprecation suppression

eternal night
#

recently stumbled onto it

worldly ingot
#

PES_BlankieThumbsUp You're welcome

smoky oak
#

whats jira short for

worldly ingot
#

ItemFactory#createItemStack(String) was a personal favourite

#

Or whatever I called that method

fickle mist
onyx fjord
#
  1. No
  2. Cant
smoky oak
#

i dont even know who you are

red sedge
onyx fjord
#

i prefer to have my plugins on spigot

vocal cloud
#

I need to get around to doing @Since sadge

worldly ingot
eternal night
#

rip @since

tardy delta
#

my classmates will be thinking wtf

#

basic stuff for me lol

eternal night
#

@since 1.18

vocal cloud
#

The best thing ever

eternal night
#

for example

worldly ingot
#

It's a Javadoc tag that indicates when a method was added

red sedge
#

ohh

worldly ingot
#

They want to since all methods for their MC version

red sedge
#

thats amazing

worldly ingot
#

Which I don't think will get merged

red sedge
#

omg

smoky oak
#

uh can someone explain why zackens reply is higlhighted and chocos isnt

remote swallow
worldly ingot
#

I didn't ping in mine

eternal night
#

one pinged you

#

yea

onyx fjord
#

i named everyone on my school discord server everyone

#

so we ping everyone

red sedge
smoky oak
#

doesnt answer the question

#

wat

vocal cloud
#

Don't think it will get merged but if it does hes_UwU

smoky oak
#

howd u do that

#

ah

onyx fjord
#

i dont see it, circle is supossed to be red

#

also no arrow, so i dont know where to look

fickle mist
remote swallow
fickle mist
remote swallow
#

oh is that for Stamina: X/10?

fickle mist
remote swallow
#

run a scheduler on enable that runs every like 30 seconds that just gets their stamina value and send it to where-ever you need it

red sedge
#

Eeeeehhhhh

#

Saving stamina on config?

subtle folio
#

seems unnessasary

remote swallow
#

probably is

red sedge
#

Do you really need to have player's stamina saved after a server restart?

#

maybe stor ethe max stamina

#

if thats dynamic

remote swallow
#

no clue why you would even need the stamina value to use anywhere

fickle mist
#

(scheduler i can do)

remote swallow
#

?scheduling

undone axleBOT
fickle mist
remote swallow
#

create a variable that you set inside the scheduler that you can get else where

#

also that timing is wron

#

wrong

#

the end should be 20l * 30l

#

for it to run everyone 30 seconds

subtle folio
#

the L at the end isn't needed

tardy delta
#

i forgot but does compiler do float cast internally?

quiet ice
#

context?

fickle mist
tardy delta
# quiet ice context?

does the compiler do (long)20 internally when putting 20 instead of 20l where a long is expected

quiet ice
#

why would it use float there... If anything it'd be long cast

eternal oxide
#

it attempts to cast to whatever you start with

quiet ice
#

Either way it's a good question whether

BIPUSH 20
I2L

or

LDC 20L

is used, but once JIT kicks in it wont play a role

tardy delta
#

ah i meant to say long

#

my brains are fucked up by reading programming book for college

quiet ice
red sedge
#

OK so I have this
new PacketPlayOutBlockBreakAnimation(9999, new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()), stage);
the first argument is what im assuming the ID does it matter?

quiet ice
red sedge
#

Yess

#

Yes yes yes

quiet ice
#

The entity ID does not need to correspond to an actual entity on the client. It is valid to use a randomly generated number.

red sedge
#

I see, does it have to be consistent?

#

Also can I ask how you got that information just so if I need to use that in the future?

quiet ice
#

Assuming its Set Block Destroy Stage, most likely not

quaint mantle
#

Any good anti bot plugins? ( i want the best one there is ) ( 1.19.2)

red sedge
quiet ice
#

Do beware that you need to search what the packet does, not what the packet name is

#

Because wiki.vg uses their own dumbed-down mappings

echo basalt
red sedge
#

sorry its just my first time trying packets and my brain is just dead

echo basalt
#

you can reuse the number but it will override the previous value

red sedge
#

hmm

quiet ice
red sedge
#

Uh change the blocks damage

#

like the break animation

#

I tried player#sendBlockDamage but since the id is the same as the players

quiet ice
#

Set Block Destroy Stage

0–9 are the displayable destroy stages and each other number means that there is no animation on this coordinate.

Block break animations can still be applied on air; the animation will remain visible although there is no block being broken. However, if this is applied to a transparent block, odd graphical effects may happen, including water losing its transparency. (An effect similar to this can be seen in normal gameplay when breaking ice blocks)
Then it is what you want

red sedge
#

the client overrides it

#

that is from what i understood

#

Hmm okay

kindred valley
#
if(if){
 Return return = new Return(if);
  return return;
}```
red sedge
#

So just to clear the ID thing up. If I have it as a set number only 1 block could have the damage at a time because when another one triggers it will clear the old one

#

But if I have an id for each player only a single block could have that

#

which would be what I want

#

or should I go w block specific like imillusion said and just clear it up later w another packet

quiet ice
#

I do not know if you can use the same ID to break multiple blocks

red sedge
#

yeah I wouldnt be able to cuz the latest one would override the old ones

echo basalt
#

you cant. it overrides the previous

red sedge
#

I think going w what you said would be the most diverse so later on i could add items that can break multiple blocks at a time

#

I'd just need to send an update packet w stage 0 at the end right?

red sedge
echo basalt
#

if you want to crack multiple blocks, just do like

#

hashCode(blockLocation) as the id

#

and reuse that hashcode for switching stages

red sedge
#

I dont need to save it do I?

echo basalt
#

pretty sure that the block break "times out" after about 5 seconds

red sedge
#

the implementation seems to be consistent wit hte blocks position so if I just use the same position it should be the same

#

Okok I got it I think

patent fox
#

where can i download protocol lib 1.19.2?

night copper
#

What java runtime version do I need to compile my code so it can work for 1.16 and above

red sedge
#

Omg it worksss!!!

quiet ice
#

Just not anything too recent (i.e. J16 is the latest I'd go)

red sedge
#

Im so happy omg

#

thank yall sm!! ^^

#

and sorry for being so stoopid

night copper
#

Can someone pls tell me the sound and pitch so it sounds like a ship crashing into an iceberg

#

or like imagine the stone is coming out of the ground

#

and if someone knows if there is a website where i can test minecraft sounds that would help me a lot

smoky oak
#

tip

#

do a command

#

and either make it /testsound sound volume pitch

#

or make it /testsound sound and then loop through possible volumes and pitches

#

the second could help you get through them really quickly

#

set the volume/pitch step high and once you found a sound that gets close make it smaller

smoky oak
crystal palm
#

heya. is the armor bar calculated client side or can it be handled by the server without packet magic?

smoky oak
#

in that order

#

the bar shows the protection the server tells the client to show

#

you need to pretend its different if u want to change it

#

but im about 90% sure u need packets

crystal palm
#

gotcha

patent fox
#

where can i download protocol lib 1.19.2?

night copper
#

I want to create a chain of TNT explosion in the direction the player is looking. About 10 blocks from the player

#

how can I do that? I want to spawn TNT every 2 blocks

smoky oak
#

get the location of the player

eternal oxide
#

vector math with Player#getLocation().getDirection() and SpawnEntity

smoky oak
#

that location has a vector thats his sight direction

#

yea that

#

normalize that vector and save it, then clone it and call multiply (2) on it

#

on the location object u get from the player, call location.add(normalVector.multiply(10)), then do a loop for as many tnt as you want

eternal oxide
#

no need to normalize as its a unit vector

smoky oak
#

in the loop spawn the tnt at the locatino then add the second vector

#

ah right

smoky oak
#

as a caveat, you need to call clone() to not mess up locations or vectors

red sedge
#

I dont think I can make a player break a block w particles so um, how wouyld i spawn block particles? preferably without hardcoding every material

#

or well I could make it a config option ig

smoky oak
#

theres a block particle

#

the thing that spawns if you walk over a block

red sedge
smoky oak
#

spawn the correct particle where the block is and give its value the block material?

#

some particles have internal value for that stuff

#

color particles have color fields

#

the block particle has a block field

#

*material

echo basalt
#

btw I hope that this is like 5 lines that just draw poly

smoky oak
#

?paste

undone axleBOT
smoky oak
#

1sec my internet decided to be slow asf

#

@echo basalt

night copper
#

can I set a cooldown like there is for enderpearls for any item or no?

smoky oak
night copper
#

i want it visual

#

i know how to make a cooldown system using hashmaps but i want this white thing over my item

red sedge
#

Btw not really plugin related but is there anyway to add ping in a local server

red sedge
red sedge
smoky oak
red sedge
#

Like

#

Increase ping

#

Delay between client and server

#

since its running on my computer its 0ms

#

but I need to see how it runs in like 200ms

mental sorrel
#

anyhere knows the right command (and class) to get the current loottable from a chest?
When i cast my BlockData to a chest, all i get is NULL on chest.getLootTable();
Tested this on multiple chests in towns...
Any suggestions?

eternal oxide
#

connect via a proxy

mental sorrel
#

Could you explain? There is loot in the chests already.
What im trying to get, is a the current loottable of chests (non player placed ones)

smoky oak
#

yea i realized that a moment later

#

might be worth to just look for lootable in ?jd-s

#

but if you say youre getting null maybe ur using the wrong interface

#

havent worked with it yet

mental sorrel
#

Also tried to cast my chest to Lootable, which is shown as obsolete event. But same result

smoky oak
#

well chest has the superinterface lootable

#

how are you getting the blockdata

mental sorrel
#

Block is giving from the event. (which is show in my debug as CHEST)
Chest chest = (Chest)block.getState();
chest.getLootTable() == NULL

smoky oak
#

which event?

mental sorrel
#

PlayerInteractEvent

smoky oak
#

thats... weird. it should show lootable. did you open the chest before already? I'm not sure but i think that if the chest was opened it removes the loot table since it had generated

mental sorrel
#

Oh! that could be the case, does it not stay on the blockdata?

smoky oak
#

dont think so

#

maybe try using left click as key if you said yes since that doesnt open the chest

#

so you hit the left click quickly and wont destroy it

mental sorrel
#

Will try, gimme 5min

smoky oak
#

remember to use a new chest

mental sorrel
#

Aye

smoky oak
#

u probably forgot to add the repo

#

imports in maven are two things

#

a dependency and a repo

mental sorrel
#

@smoky oak
if (event.getAction() == Action.LEFT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.CHEST){
Block block = event.getClickedBlock();
Chest chest = (Chest)block.getState();
Player player = event.getPlayer();

         if(chest.getLootTable() == null) {
             player.sendMessage("getLootTable NULL");
         } else {
             player.sendMessage("LootTable:"+ chest.getLootTable().toString());
         }
     }
#

that did show the loottable

smoky oak
mental sorrel
#

aye, after closing again, its gone.

ivory sleet
#

preference mainly

smoky oak
#

idk i only ever used maven

ivory sleet
#

though some stuff is only available for maven respectively gradle

kind hatch
#

It looks deprecated.

#

There's only two constructors for NamespacedKey It looks like you are using the one with two strings as its parameters?

quaint mantle
#
getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {

            }
        }, 0, 0);

what does two of these last arguments mean?

#

trying to call method every x second

tardy delta
#

time to wait before starting and time between current and next loop

#

?jd-s

undone axleBOT
untold jewel
#

Is there a way to make actual custom enchants or do I have to do add a lore and get the lore and change what happens upon that

kind hatch
#

You can use the Enchantment class provided by spigot and it will tie into the Enchanting table, but it's not that well documented.

untold jewel
#

I'm not talking about enchantment table. I have been making a custom economy plugin and starting on the shop. I want to add custom enchantment books which you can use on tools with anvils

#

that sad

#

well thanks

#

Do you think it would be easier to just make a drag and drop method?

#

Like you drag the book over an item and apply it

quaint mantle
#

Im whitelisted (in whitelist.json), but i cant join server. Should i reload whitelist? Looks like getServer().reloadWhitelist(); is not enough

#

Also whitelist.json doesnt have name :


[
  {
    "uuid": "my-super-uuid-real-more-numbers"
  }
]
warm mica
#

It could be because of the missing name

twilit roost
#

how do I check if Vector's are similar?

worldly ingot
#

.equals()

wheat hazel
#

hello! I'm stuck in my code. I don't understand how to put text on the sign

public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {


        Player p = (Player) sender;

        Location web = p.getLocation();

        int weby = (int) (web.getY() + 100 );

        Location web2 = new Location(web.getWorld(), web.getX(), weby, web.getZ());

        PacketContainer openSign = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.OPEN_SIGN_EDITOR);


        this.position = new BlockPosition((int) web2.getX(), (int) web2.getY(), (int) web2.getZ());
        p.sendBlockChange(this.position.toLocation(web2.getWorld()),Material.OAK_WALL_SIGN.createBlockData());



        openSign.getBlockPositionModifier().write(0, this.position);



        try {
            ProtocolLibrary.getProtocolManager().sendServerPacket(p, openSign);
        } catch (InvocationTargetException e) {
            e.printStackTrace();

        }


        return true;

    }
}
golden turret
#

which event is called when the item fully burns?

prime reef
#

@ anyone using IntelliJ, there's a plugin for spigot/forge stuff

#

lets you preview chatcolors at least, it's handy

#

I'm not sure what else it does yet, but the most recent version of IntelliJ straight up recommended it, so I guess Jetbrains knows people use it for Spigot lmao

golden turret
#

intelligent

subtle folio
prime reef
#

I haven't done much else with it LOL

#

mostly because I legitimately have no idea what it's capable of

subtle folio
#

it’s just a small utility

worldly ingot
#

Last I recall it has in-built MiniMessage parsing?

#

I could be wrong though

torn oyster
#

@everyone||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​|| _ _ _ _ _ _ @torn oyster

#

lol

#

i find that thing funny

subtle folio
#

Whast the datasource class name for the postgresql driver?

dusk flicker
hazy parrot
#

is there built in api for getting server tps ?

subtle folio
# hazy parrot is there built in api for getting server tps ?
 StringBuilder sb = new StringBuilder( ChatColor.GOLD + "TPS from last 1m, 5m, 15m: " );
        for ( double tps : MinecraftServer.getServer().recentTps )
        {
            sb.append( format( tps ) );
            sb.append( ", " );
        }
        sender.sendMessage( sb.substring( 0, sb.length() - 2 ) );```
hazy parrot
subtle folio
#

It is nms yes

hazy parrot
#

ty

prime reef
hazy parrot
prime reef
#

yeah there's not a super accessible one

#

but since the NMS to get it isn't obfuscated, you could just reflectively grab the TPS via NMS

#

I think I did that, actually

#

but apparently I removed the code to do it

prime reef
#

big bruh

#

I have no idea if there's a way to get the NMS version string easily nowadays, but the way I did it - which still works - was uh

#
    public static final String NMS_DOMAIN = "net.minecraft.server";
    public static final String CRAFTBUKKIT_DOMAIN = "org.bukkit.craftbukkit";
    public static final String CRAFTBUKKIT = "craftbukkit.";

    private static String version;
    private static String nmsPackage;

    private static String craftbukkitPackage;

    /*
     * https://gist.github.com/ReflxctionDev/84a5753a69f426f48ffe75f7ab3adcbb
     * pointed me in the right direction when it came to actually getting the version string.
     */
    static {
        version = Bukkit.getServer().getClass().getName();
        version = version.substring(version.indexOf(CRAFTBUKKIT)
                + CRAFTBUKKIT.length());
        version = version.substring(0, version.indexOf("."));
        nmsPackage = NMS_DOMAIN + "." + version;
        craftbukkitPackage = CRAFTBUKKIT_DOMAIN + "." + version;
        EmberCore.log(Level.INFO, "You're running NMS version " + version + ".");
        EmberCore.log(Level.INFO, "  NMS package: " + nmsPackage);
        EmberCore.log(Level.INFO, "  CB package: " + craftbukkitPackage);
    }```

it's a bit ugly and verbose but it works just fine
#

ignore the logs, not necessary

#

oh, ew, it's string concat. get out of here

#

literally so old i'm not even using my new log methods

#

then to get the class, I just wrote a helper method

#
public static Class<?> getNMSClass(String className) throws NullPointerException {
        String fullName = String.format("%s.%s", nmsPackage, className);
        try {
            Class<?> clz = Class.forName(fullName);
            return clz;
        } catch (Exception e) {
          // generally speaking catching Exception is bad but for the sake of example
          // just do whatever here
        }
        return null;
    }```
#

after that you can just reflectively invoke getServer() and fetch "recentTps" from that object

#

should be version independent unless something changes in the packaging/classes, but that's on Mojang for randomly changing things

worldly ingot
#

String internalVersion = Bukkit.getServer().getPackage().getName().split("\\.")[3];

#

That will get you the CraftBukkit revision

prime reef
#

I feel like that wasn't there before LOL

#

hmm

#

no it was

#

it's just java reflection

#

weird. i probs got this code somewhere and never bothered to improve it, but that's a lot cleaner

#

one note

#

Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];

#

need the getClass

worldly ingot
#

Yeah

prime reef
#

quick test and that worked just fine

torn oyster
#

why does sendPacket(((CraftPlayer) owner).getHandle(), new ClientboundRemoveEntitiesPacket(npc.getId())); sometimes not remove an NPC?

iron glade
#

Is there a way to not translate the last part of this config.yml message
Color-Code-Info: "&fFeel free to use &acolor codes (&0-9, &a-f, &k-o, &r)&f." ?
I mean (&0-9, &a-f, &k-o, &r), so that it's not translated into colored chat

#

Nevermind, I think the easier solution might be to just rewrite it like this
Color-Code-Info: "&fFeel free to use &acolor codes (&[0-9], &[a-f], &[k-o], &[r])&f."

prime reef
#

You could also just not translate alternate color codes on that message.

iron glade
torn oyster
#

has anyone ever made a music library?

#

that reads from a midi or something and converts it into a Song class or smth that they can just do Song#play(Player)

#

and it uses minecraft sounds

worldly ingot
#

I mean that information has to be sent to players using a resource pack

#

But you can do that already with vanilla. Player#playSound() accepts a string

torn shuttle
#

hey I am just failing to unload worlds via Bukkit.unloadWorld(string, false);

#

also with the world object

worldly ingot
#

If you want to do it just with noteblocks, there are tons of API for those too

torn shuttle
#

I don't really know what to look at for this one

#

ideas?

#

how can this even return false?

prime reef
#

That shouldn't parse normally

iron glade
#

idk, somehow it does

#

Does anyone have an idea how I could approach this:

I want to replace every empty line in an item meta's lore with - symbols. They should be as many as are needed to make the line containing them as long as the longest line in the lore (or display name if it's longer than the lore)
My first idea was to just iterate over the lore and see how many characters the longest line contains, but then I realized that some characters have a different width than the - symbol. That's where I'm stuck rn

torn shuttle
#

I am very lost about this one

torn shuttle
#

resource packs change fonts and font sizes, different languages have differently sized and spaced characters

#

and each character occupies a unique amount of space, it's not monospaced

night copper
#

doesnt java have something like text = text.replace(" ", "-");

#

but that would replace the spaces between the words so maybe replace 2 spaces in a row with 2 minuses replace(" ", "--");

iron glade
#

I think even doing that would not result in an accurate amount of - symbols due to the reasons Magma pointed out

night copper
#

ok

iron glade
#

Think I would have to know the player's font and get the width of every single character, add them up and divide that by that font's - character's width or smth

#

but don't think that it's possible to get a player's font?

kind hatch
#

Did you register your command? Also, what are you typing and where?

#

Also, the check for if sender is null is redundant since CommandSender is annotated as @NotNull

iron glade
#

Probably ur args are wrong

#

the way you're using them, your command would have to look something like /command <idk> ver <player>

#

and this is impossible with args length == 1

#

as you're running this on an else after a if(args.length != 1)

#

so ver is args[0], player is args[1] and x is args[2]

#

args.length == 3

#

probably wanna use if(args.length > 3) instead of != 1

#

then check if args.length is 1 and args[0] equals "ver"

iron glade
kind hatch
iron glade
#

Commands look like this:
/command args[0] args[1] args[2] args[3]... etc
So if you want your command to be
/command ver <player> <x> your player is args[1]

undone axleBOT
civic wind
#

You’re checking player args 1 at args length 3

#

And yoi can do it in one if, check if args less than the args you’re looking for if it is send message else, return command etc

#

Java counts from 0, your args don’t match up, unless im tripping im still learning too

#

No

#

Arg0 is 0

#

0, 1, 2, 3 etc

#

Ignore base command

#

And you can do all them checks in one statement

#

And send just one usage message, then else <your code>

#

No problem

tender anvil
#

how would i spawn an entity (a dropped item) and then make it ride an arrow?

class ChorusArrow : org.bukkit.event.Listener {

    @EventHandler
    private fun shootEvent(e: EntityShootBowEvent) {

        val arrow = e.consumable
        val projectile = e.projectile

        if (arrow!!.isSimilar(ItemsManager().chorusArrow.item)) {

            projectile.world.spawnEntity(projectile.location, EntityType.DROPPED_ITEM)

            projectile.passengers.add(???)
                        
            //this is not important
            projectile.persistentDataContainer.set(NamespacedKey(Fletching.plugin!!, "id"), PersistentDataType.STRING, "chorusArrow")


        }

    }

}
``` btw this is kotlin sorry
iron glade
tender anvil
iron glade
#

What do you mean with "target" ?

chrome beacon
crude charm
#

How do I differentiate between the player clicking another and the player being clicked with EntityInteractEvent?

crimson terrace
#

Theres a playerinteractevent if that helps

glossy venture
#

is this the correct way to write and read UUIDs over a network connection?

#

cant really test rn

crude charm
echo basalt
crimson terrace
echo basalt
#

getClicked, getPlayer

crimson terrace
#

That appearently only goes for right clicks, not sure if thats whats wanted here

tall dragon
#

you would need to run buildtools

#

?bt

undone axleBOT
tired oar
#

Any plugin recommendation for Spigot 1.19 for backpack cosmetics

crimson terrace
#

Not even sure if youre just guessing at this point. The Playerinteractevent has the clicking player, which means you can (with a bit of logic) get the player that was clicked

quasi flint
#

i would raytrace

#

from the players pos and looking dir

#

and see if it hits a player

stoic vigil
#

should i create a tabcomplete class for all commands or one for every command?

#

and how to register tabcompletions in the Main.java?

tall dragon
#

i have a class for each command that houses the command logic and the tabcomplete logic

stoic vigil
#

perfect, thy ❤️ register with getCommand('commandname').tabComplete() or anything like this i think?

tall dragon
#

you can register it almost the same way you register the command, #setTabCompleter

#

but yes

stoic vigil
#

okee thx 🙂

#

so intelliJ says i should move it to a separat class, but it whould work like this, right?

package com.schwerthecht.poster.commands;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;

import java.util.List;

public class CreatePoster implements CommandExecutor {
    @Override
    public boolean onCommand(CommandSender commandSender, Command cmd, String label, String[] args) {
        // check if Player
        if (!(commandSender instanceof Player)) { return false; }

        //TODO: create new poster
        //TODO: place poster
        //TODO: register poster

        return true;
    }
}

public class CreatePosterTabComplete implements TabCompleter {
    @Override
    public List<String> onTabComplete(CommandSender commandSender, Command cmd, String label, String[] args) {
        return null;
    }
}
tall dragon
#

you can just make the same class implement Tabcompleter

stoic vigil
#

ahhh! okee now i understand

#

what's this about?

smoky oak
#

whatever sent the command

#

may be player

#

or something else

echo basalt
#

💀uh no

smoky oak
#

wdym no

echo basalt
#

IDE is just telling you

#

that the bukkit api annotated those params

#

with @NotNull

stoic vigil
#

okee? so it doesn't matters right?

echo basalt
#

yet you're not annotating them when overriding

#

which breaks the implicit contract

#

yeah it no matter

crimson terrace
glossy venture
#

\

smoky oak
#

how do i sample a cartesian function inside a specific range, such that i can give a delta value for the distance along the graph to be sampled, assuming two-dimensionality and a maximum distance from the origin?

#

also, is it possible to do as such with functions that give more than one value for x?

lost matrix
smoky oak
#

urgh thats annoying

#

my goal was to parse strings to functions

vagrant merlin
#

heyy im looking for OP Minecraft Developer for good money

smoky oak
#

if i have to hard code its kinda missing the point

agile anvil
lost matrix
agile anvil
#

You'll need to filter your parsed function in another function to "crop" your graph

vagrant merlin
#

heyy im looking for OP Minecraft Developer for good money

smoky oak
#

huh

vagrant merlin
#

someone wanna strat work?

agile anvil
vagrant merlin
#

in Google?

agile anvil
#

Spigot forum

smoky oak
#

uh @lost matrix can i even use that to make a evaluation over graph distance?
What i meant is that i want to essentially give a function and plot along that function every distance x, but i dont see how i could do that with crunch without using a ridiculous amount of sampling

vital sandal
agile anvil
kindred valley
#

how to prevent double clicking on interactevent

smoky oak
kindred valley
#

i mean when player interacts and toggles pressing it it triggers over and over

smoky oak
#

keep a counter then

kindred valley
#

wdym

smoky oak
#

so just keep a counter if they had activated it

vital sandal
#

Create a static set and save player to it-> New runnable to remove it after a few tick

chrome beacon
#

Static :c

kindred valley
#

I completely dont use statics

chrome beacon
#

Static has it's use

#

You just need to know when to use it

#

This is not one of the cases where it should be used

floral drum
#

private static final

kindred valley
#

this is my main method

public non-static void main(String[] args) {

}```
floral drum
#

ahaha

#

ok good one

smoky oak
#

u should use static for two things
methods that dont change the class theyre part of and variables that should only exist once

floral drum
#

exactllyyyyyyy

#

@vagrant stratus can agree

#

me and him hate static

#

haha

smoky oak
#

yall aint helpful

#

the only idea i have is to get the derivative & check that but that wont work with all graphs

undone axleBOT
kindred valley
fluid river
#

good afternoon comrades

#

where are newbies

kindred valley
#

snake

fluid river
#

show me

fluid river
#

this code is cring

smoky oak
#

if it works

fluid river
#

????

kindred valley
#

i am just trying to handle it

#

that guy told me to do it

eternal oxide
#

Your runnable will never end as you set the remained inside the run method

fluid river
#

also chaning itemMeta every clickevent

#

why don't you do that in constructor

#

and why is it static lol private static Economy economy;

#

no need for that

eternal oxide
#

I just told you why, Line 40

fluid river
#

cuz you init remained variable with value 5 every run() method

#

and work with this local variable

#

not with global one

eternal oxide
#

You got the other 3 runnables correct, but not the first one

kindred valley
#

ah fuck

#

i put it into run

smoky oak
#

want to see terrible scheduler code?

for(int i=0; i<displayTimes.get(1); i+=displayTimes.get(0)){
  Bukkit.getScheduler().runTaskLater(Echo.getInstance(),e->{Particles.renderAllParticles(displayPoints,4,1,from,to);},i);
}
eternal oxide
#

You also never initialize economy in that code so it will be null.

kindred valley
#

no its fine

#

economy = LoyalHubMain.getEcon();

eternal oxide
#

you are setting it every time a player has a cooldown

kindred valley
#

How can i prevent player to enter the event for multiple times. Because when they got interaction and toggle pressing it multiply entering the event

eternal oxide
#

which is every single interact event

vital sandal
#

... a static set ?

eternal oxide
#

this is always going to be true playerWhoHasCooldown.add(p); if(playerWhoHasCooldown.contains(p)) {

vital sandal
#

^

#

Actually u need a map

kindred valley
#

yes aye

#

i need

vital sandal
#

U need an uuid for it

#

Or the previous will delete the later one instantly

kindred valley
#

No same

#

thing happens

#

Is not there any other way

vital sandal
kindred valley
#

bro but how can i do that

#

if it does not contain it will never enter the case

vital sandal
#

If (hashmap not contain p) add to map

#

If it always add to map your statement always true

eternal oxide
#

It is ALWAYS going to contain it as you just added it.

fluid river
#

noob level 99

kindred valley
fluid river
#

no?

#

wtf are you talking about

eternal oxide
#

yes, your cooldown does nothing

fluid river
#

what are you even trying to do

untold jewel
untold jewel
# kindred valley bro then player will be able to click again
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class CooldownManager {

    private final Map<UUID, Integer> cooldowns = new HashMap<>();

    public static final int DEFAULT_COOLDOWN = 15;

    public void setCooldown(UUID player, int time) {
        if (time < 1) {
            cooldowns.remove(player);
        } else {
            cooldowns.put(player, time);
        }
    }

    public int getCooldown(UUID player) {
        return cooldowns.getOrDefault(player ,0);
    }
    public void removeCooldown(UUID player) {
        if (cooldowns.contains(player)) {
           cooldowns.remove(player);
else {
//not in cooldown
}
eternal oxide
#

every single time the interact event fires you add the player to your cooldown. then you ask if they are there and run the rest of your code.

fluid river
#

player.setCooldown(Material.STICK, 100);

#

ez

kindred valley
#

no matter map or set

untold jewel
#

Calm down

fluid river
#

use @untold jewel's code

untold jewel
#

As both NukerFall and ElgarL has said plenty of times now you are doing it wrong

#

If you want help, and want to actually learn how to do it then you have to take the advice they / and others are giving you

#

otherwise, why are you coming here to show the code?

fluid river
#

?learnjava

undone axleBOT
fluid river
#

ez solution

#

or

#

FREE JAVA LESSONS

checkmybio

#

raising

untold jewel
#

russki?

fluid river
#

yes

untold jewel
#

nicer

#

Nice

fluid river
#

da

#

kruto

vital sandal
fluid river
#

also at least make comments on english

#

bru

#

it's not understandable and i don't want to translate each message myself

sterile token
fluid river
#

you want to learn java

sterile token
#

Haha

#

I was trolling dont get más

#

Lmfao what a cristal generatiom

kindred valley
fluid river
#

no

sterile token
#

Lo pex

untold jewel
#

whats critsal

#

you mean crystal or snowflake?

fluid river
#

who knows

fluid river
sterile token
#

Limpez if expext help you should make comments in english

fluid river
#

that's what i just said lel

sterile token
#

Lmao i hate the word corrector because its for Spanish and mix everything when I talk in english

fluid river
#

disable it?

#

The only word corrector is brain after you sent message already

untold jewel
fluid river
#

google Penis Rebenkov

untold jewel
#

I know but this is simple and understandable for him

#

if he does not know how to use maps

rapid vigil
#

Hello, question is this how to get a EntityPlayer's Pitch?
:

    private Location getLocation() {
        return new Location(
                npc.getWorld().getWorld(),
                npc.locX(),
                npc.locY(),
                npc.locZ(),
                npc.y,
                npc.bp);
    }```
Is it `bp` or something else
vital sandal
#

getPitch() ?

rapid vigil
eternal oxide
#

xRotO is remapped pitch

rapid vigil
eternal oxide
#

line 31 is going to set teh cooldown to 5 every time a player interacts

untold jewel
#

So its easier to understand

untold jewel
eternal oxide
#

He was wanting NMS pitch

kindred valley
untold jewel
eternal oxide
#

Yep. he doesn;t understand what is CB and what is NMS

rapid vigil
untold jewel
#
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class CooldownManager {

    private final Map<UUID, Integer> cooldowns = new HashMap<>();

    public static final int DEFAULT_COOLDOWN = 15;

    public void setCooldown(UUID player, int time) {
        if (time < 1) {
            cooldowns.remove(player);
        } else {
            cooldowns.put(player, time);
        }
    }

    public int getCooldown(UUID player) {
        return cooldowns.getOrDefault(player ,0);
    }
    public void removeCooldown(UUID player) {
        if (cooldowns.contains(player)) {
           cooldowns.remove(player);
else {
//not in cooldown
}
#

it goes on uuid so if you have a Player variable you have to do player#getUniqueID

kindred valley
crude charm
lost matrix
#

Yes

#

yes

crude charm
#

does clicking an npc trigger PlayerInteractEntityEvent?

#

yes it does

crimson terrace
#

You just tas'd yourself 😄

eternal oxide
#

?notworking

undone axleBOT
#

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

red sedge
#

anyway to have an item that has an attack speed like vanilla items

#

wha-

#

getHeldItemSlot(int index);
w h a t

pseudo hazel
#

even your ide should be firing you for that

#

why

red sedge
#

what event is triggered when the player changes their armor

pseudo hazel
#

yes, but it would be accurate to the time passed on the server

#

which is what you usually want

#

I think both ways are equally valid depending on what you wanna do

#

actually idk xD

#

you might have a point

#

my bad

#

i thought there was a reason but I blanked on it

#

well yes

#

I am more experienced with like item cooldowns or other times for gameplay elements

stoic vigil
#

is it possible to send nbt text (text as in /tellraw) as plugin.yml usage text? and if yes, how to do?

red sedge
#

thats just a java method..

eternal oxide
#

Well kinda. Always return true in your onCommand and send the text yourself

worldly ingot
#

Right, but they specifically mentioned the plugin.yml, which is not possible

eternal oxide
#

No, but you can read the text from there

hasty obsidian
#

Does anyone know how to keep effect after death

untold jewel
#

check if they have an effect before dying and reapply

#

maybe

#

you should use a map for that I think

#

so listen to the PlayerDeathEvent, put in map and then listen to the PlayerRespawnEvent

#

check if the player is respawning inside the map and if they are delay it by a tick or two and give them back the potion effects you have stored

red sedge
#

I think just listening to playerdeathevent will work

#

get the players effects

#

and apply them again a tick later

untold jewel
#

player#getActivePotionEffects() (remember to check if its not null) and use a Map<Player, Collection<PotionEffect>>

tranquil dome
#

How can I stop a fire charge from lighting the floor on fire, but keep the explosive effect?

untold jewel
#

??xd

remote swallow
untold jewel
#

Literally should just use the PlayerRespawnEvent

#

obviously i mean both

sterile token
#

Hi

remote swallow
#

?nohello

undone axleBOT
sterile token
#

Hahaha

#

Also im on a public chat

remote swallow
sterile token
#

No?

remote swallow
#

lul

sterile token
#

Oh my bad

#

Odian tech

remote swallow
#

and it should be ItemsStack not int for that

sterile token
#

I think he should read more about javadocs

#

Because javadocs will help you

#

My father have told me many times that he wont be al life together with me so i need to care my self

#

This apply for development

#

?tryandsee

undone axleBOT
remote swallow
#

are you trying to get an item in a specific slot?

quaint mantle
#

how fix, Unsupported class file major version 61

#

java 17

#

plugin version is 1.19

#

so should work

remote swallow
#
It means Java 17 (major version 61) compiled the class file, and if we try to run the class file under Java 16 and below environment, and we will hit Unsupported class file major version 61.25 Aug 2022
  • google
quaint mantle
#

so, how would i fix it?

remote swallow
#

are you using intellij for the building?

quaint mantle
#

yes

remote swallow
#

check your sdk version

quaint mantle
remote swallow
#

are you using java 17 as your jre

quaint mantle
#

do you mean this:?

#

?paste

undone axleBOT
quaint mantle
#

where do i find that?

#

im dumb / blind

#

oh nvm

#

1.8 works fine

#

but i wanna use var

#

because its easier

#

and some other things

#

i've tried to change my java version to 17 multiple times

#

even 16 and 18

quick crest
#

help

quaint mantle
#

yeah, whenever i compile it

quick crest
#

whats the name of the packet where the player receives a message from the server?

quaint mantle
quick crest
#

i did

#

but idk how to read them :(

#

theres one for 0x16 that looks like I could use

#

but beyond that im not sure

#
Main article: Plugin channels
Mods and plugins can use this to send their data. Minecraft itself uses several plugin channels. These internal channels are in the minecraft namespace.

More information on how it works on Dinnerbone's blog. More documentation about internal and popular registered channels are here.```
visual tide
visual tide
quick crest
#

yeah

#

okay so whats the packet event's name

#

like play_server_server_difficulty refers to changing difficulty

#

what ab that one?

quaint mantle
#

theres both

remote swallow
#

i have a feeling maven 3.8.1 uses java 16 still

quaint mantle
#

i'll change it to 3.8.6

#

one sec

#

awit

#

so what's the problem

quick crest
remote swallow
#

get it, then add it then set it

quaint mantle
#

i've tried to get help from many people

quick crest
#

wait ill create a thread

remote swallow
quaint mantle
#

isn't maven better in some ways?

#

i mean idrc if i change

#

but

quick crest
#

System Chat Packets

remote swallow
#

one sec

sterile token
#

Config#Set will override the value if it exists

quaint mantle
#

one moment

remote swallow
#
double speedAdder = config.getDouble("stats.miningSpeed") + 100.0;

config.set("stats.miningSpeed", speedAdder);
quick crest
#

so can anybody check out my thread and help?

#

it seems like such a simple problem im just way too bad at this stuff

quaint mantle
#

sorry that took so long

#

but it works

#

thanks so much

reef lagoon
#

is there a way to remove only 1 of an item

vocal cloud
#

yup

honest echo
#

hey how do i read a file in UTF-8 in Linux, when i use -Dfile.encoding=UTF-8 argument it works in Windows but not in Ubuntu

#

Thats resulting Unicodes not working

chrome beacon
#

It should be the same flag

#

Make sure to save everything in UTF-8

#

oh and when changing format make sure to correct some of the characters

quick crest
#

i really cant find anything ive been trying to find solution sfor a day now

twilit roost
#

I want to calculate force applied to Ship
I have ship and also direction of the wind
I tried every Physics Law but can't get it to work

Some poop illustration of what I want:

tardy delta
#

is that a b-boat?

distant wave
#

So i have custom item, then i give that item to player and i change the lore of that item in hand. Is there any way to say if it is still that custom item?

#

like adding a tag that its a custom item

tardy delta
#

?pdc

distant wave
#

cool thanks

smoky oak
# twilit roost I want to calculate force applied to Ship I have ship and also direction of the ...
#

find cross section and wind speed

#

plug in number

quaint mantle
#

Is ItemStack serializable?

eternal night
#

ye

ashen quest
#

but not sure

quaint mantle
#

I'm wondering if I can outputstream it to bytes and later on read it

hasty wasp
#

you should convert it to an nsmitemstack before

agile anvil
tardy delta
#

base64

hasty wasp
fluid river
#

oh i slept 1 hour

#

overslept noobs questions

quaint mantle
#

Why base64?

#

I want to store them as bytes

#

Using a String has the issue that they have a limit (actually yes, there's a limit)

#

I had an issue before in which a database did truncate because of a long String 🤨

echo basalt
#

databases might truncate stuff

#

but strings are just a char[] wrapper

smoky oak
quaint mantle
#

Not my fault

smoky oak
#

thats a good point

hasty wasp
#

actually he has a point, for example have a shulker filled with a hole bunch of nbt items...

#

this produces a really large string

#

in base64

smoky oak
#

the only thing that really has long nbt tags are books

quaint mantle
#

I remember that Mojang did compress whenever saving stuff inside inventories, I know this because of a dupe exploit that required books

smoky oak
#

and if you stack a shulker of those

#

yea kinda ur fault

hasty wasp
#

nah

smoky oak
#

that dupe was because chunks had a maximal storage size

#

if you give too much data into a chunk and unload it

#

it cant save

hasty wasp
smoky oak
#

so it resets to its last saved state

#

was fixed with 1.16.something

quaint mantle
#

tiny blob, mediumblob, etc

smoky oak
#

hi zorro

ivory sleet
#

I mean most dbs allow you to configure these things afaik

quaint mantle
#

I cannot let the database allocate 4GB just to solve the issue.
What if someone finds out how to stack shulkers inside shulkers and manages to upload 200 MB of an inventory? lol
I remember someone said "never trust the user, user is stupid"

hasty wasp
#

you could compress the base64 string

#

could help

ivory sleet
#

anyway the good thing about databases is that you have relational ones

#

which allow you to structure the data

hasty wasp
#

kinda ironic that postgresql has a json datatype lol

fluid river
echo basalt
#

ehh internally it's a char[] that implements CharSequence methods

tardy delta
#

wondering what other stuff implement charseq

#

ah right

ivory sleet
mossy gazelle
ivory sleet
#

Hi, you know how i can create a skull item in my menu with a base 64?

fluid river
#

not on the same location

mossy gazelle
#

Yes

fluid river
#

that's the solution

mossy gazelle
#

How can I do that, first time making a plugin

fluid river
#

Umm basically you need to be a doctor of Mathematics

#

So you can use vector maths

lusty niche
#

Can you explain me how to create a Spigot Plugin for 1.19.2 where I need to send a message to a player with a "clickable text"?

I've all the functions of my project, I'm using only Spigot Api 1.19.2 and I need to send a message with clickable text, Idk how to do that

fluid river
#

and find a block which is behind the arrow

mossy gazelle
#

Soooo google?

lusty niche
fluid river
#

TextComponent is included already

#

isn't it

echo basalt
#

you just gotta know how to think in 3d, and how polygons and lines work

#

and you should, in theory, be fine

fluid river
#

and i'm having problems sometimes

#

:0

ivory sleet
#

?jd-bcc

fluid river
#

think it's here somewhere

lusty niche
fluid river
#

when player shoots arrow

#

When arrow hits the ground you stop it

#

Inside the timer you do mafs part to get the block right behind the arrow

#

And if it's air replace it with a block type you need

echo basalt
#

help my gradle cache is consuming 10gb

lusty niche
fluid river
#

it's not

#

at least shouldn't be

#

net.md_5.bungee.api.ChatColor and others are included in spigot as far as i remember

#

at least chatColor

#

player.spigot().sendMessage(component);

tardy delta
#

yes

fluid river
#

here's what you need

#

Clickable text to send player

fluid river
#

basically includes everything from org.bukkit

#

and has own stuff

#

without spigot/paper you can't send clickable text as i can see

#

so it won't work on default CraftBukkit

civic wind
#

After you’ve built the text component

fluid river
#

?

#

you do player.spigot().sendMessage(yourComponent);

civic wind
#

Yeah

lusty niche
#

with TextComponent message = new TextComponent("Click me"); => The IDE says The constructor TextComponent(String) is not visible

fluid river
#

probably for olderVesrions

#

there was a ComponentBuilder class

ivory sleet
#

maybe wrong import

tardy delta
#

dont use awt one

river oracle
#

Just use ComponentBuilder it makes it prey easy

fluid river
#

here

#

use this

lusty niche
fluid river
#

what does not it remove

#

if you want to remove something from config

#

do

#

config.set("path", null);