#help-development

1 messages · Page 1784 of 1

ember estuary
#

thats like my only option.

if a player runs a command, it has to replace the item in his hand with a map, until he leftclicks, then it changes the item back to what it was.

so now what if the player leaves before left-clicking. how could i change it back

#

so yeah, thats why i want the item change to be client-side only

grand escarp
#

im using custommodeldata so it keeps the texture even if you rename it

ember estuary
#

md_5, do you know if its row & column?

tardy delta
#

uhu true

quaint mantle
quaint mantle
ember estuary
#

could do that, but why add unnecessary events
i'd also have to consider player death event

#

just too much risk of duping imo

quaint mantle
ember estuary
#

what if the server crashes after giving them player the item

quaint mantle
#

thats not your problem

ember estuary
#

cant change it back then can i

#

well it is

#

then he has an item he shouldnt have

#

its just too much risk of duping to give the actual item and not a fake

ivory sleet
#

I mean crashes are still not a part of the system implementation since they're mostly unintentional and sometimes unpredictable

ember estuary
#

players can make a server crash intentionally

ivory sleet
#

hence the adverb mostly

ember estuary
#

still something to consider

grand escarp
#

i changed it

#

it still doesnt have any metas

ivory sleet
#

It's better to just trying to fix the crash exploit as well as saving frequent backups

grand escarp
#

it wasn't that i was overriding an existing recipe

quaint mantle
#

Stop being paranoic and spend your time on something more useful rather than maintaining fuckery with packets for single feature

grand escarp
#

???

ember estuary
#

(s)he means me

grand escarp
#

yea

#

BUT

#

i come back to this

ember estuary
#

if i now implement a dozen event handlers or a single nms call doesnt make much time difference
Its not paranoic, i've duped for years myself using server crashers etc., giving the player a real item is just simply an unsafe solution. imo.
but yeah, will stop discussing now

quaint mantle
#

You may add a pdc Tag to the Map. On click, check if it has the tag. If yes, remove the item

ember estuary
#

yeah, thats a good idea

west oxide
#

hey am still learning java here and

#
        String prefix = Plugin.getConfig().getString("prefix");
        return prefix;
    }```
#

i did this

#

so that i can call it out on other classes

ivory sleet
#

looks somewhat cursed

#

but its nice :3

west oxide
#

yeas

quaint mantle
#

LoL

west oxide
#

it didnt work

#

lol

#
        String prefix = customChat.getprefix();
        sender.sendMessage(prefix);
        return true;
    }```
#

it gives me error

#

isnt it supposed to give value of prefix from config ?

round finch
#

---> (customChat Plugin)

ivory sleet
#

public static String getprefix(customChat Plugin){

round finch
#

you need to put CustomChat plugin in your method

ivory sleet
#

the function definition of getprefix has what you call parameters

#

in this case 1 parameter

west oxide
ivory sleet
#

so when you use/call/invoke the function, you need to pass an actual value to the function

ivory sleet
#

your plugin instance

#

but I mean

#

technically if you want it simple:
String prefix = JavaPlugin.getPlugin(customChat.class).getConfig().getString("prefix")

#

and psst, customChat should be named CustomChat

west oxide
#

am just trying this out

ivory sleet
#

alr

#

anyways it wants you to pass your plugin instance

#

or well to be more specific, it wants the object of your main class, customChat.java

#

and I'm using the instead of an as there can ever be one object of that particular class due to bukkit

round finch
grand escarp
#

and it still had no metas

#

it was diamond pick + my custom item (which was an IRON ingot) = normal netherite pick

west oxide
#
        Plugin plugin = customChat.getPlugin();
        String prefix = plugin.getConfig().getString("prefix");
    }```
#

this worked for me before ..

#

not now tho

#

lol

ivory sleet
#

shakiz first of all

#

learn to completely code in Java without static at all

west oxide
#

okay

#

i will try

ivory sleet
#

good

west oxide
#

:D

ivory sleet
#

I assume you understand variables decently?

west oxide
#

yes

#

decent

ivory sleet
#

Well next thing is methods

crimson terrace
#

what do I have to be so my plugin actually saves and rewrites the values in the config?

ivory sleet
#

(yes we're skipping loops, if and else stuff but I am sure you understand that somewhat more profoundly that the most hardcore oop concepts)

crimson terrace
#

ok thanks, Ill try it

ivory sleet
#

yeah

west oxide
ivory sleet
#

yeah

#

and loops I hope you get the gist of at least

west oxide
#

and loops not very very well

#

yes

ivory sleet
#

well lets skip it

west oxide
#

yes

ivory sleet
#

but in short its repetition (iteration)

west oxide
ivory sleet
#

good

#

so what's a method

crimson terrace
ivory sleet
#

explain to me what a method is and give me an example

grand escarp
#

my item is crafting

west oxide
#

i understand what this is :

}
ivory sleet
grand escarp
#

but there is no meta still

round finch
#

yup i figure it out

grand escarp
#

HW

#

HOW

round finch
#

i used to do CraftFurance

#

it kinda similer

proud basin
#

A spigot plugin with only using enums

round finch
#

i'm just checking output right now before i send code

spice juniper
#

When do I need to specify an api version?

#

In the plugin.yml?

proud basin
#

no

crimson terrace
spice juniper
proud basin
#

yeah?

#

You don't need to specify one

spice juniper
#

Okay

#

Do you also know how to make your plugin compatible with 1.17

proud basin
#

oh wow my water friction check doesn't like flying in water

#

nms

ember estuary
#

scheduleSyncRepeatingTask gives back an int. In what range is this int expected to be?
Can it be 0? or negative?

quaint mantle
#

thats task id

ember estuary
#

yea, thats what i assumed

#

what numbers can it be tho

#

cuz i wanna check if a task exists

#

so if i set default id to 0, and then scheduleSyncRepeatingTask returns 0, my check will not work

#
private int taskID = 0;

...

private void startScheduler() {
        if (taskID != 0) return;

        taskID = MapMenu.scheduler.scheduleSyncRepeatingTask(MapMenu.instance, () -> {

        }, 0L, 1L);
    }
#

see, thats why i gotta know what values scheduleSyncRepeatingTask returns

#

can it be negative, or 0, or is it guaranteed to be positive

eternal oxide
#

pretty sure it only returns -1 if it fails

ember estuary
#

alright

#

what about 0?

eternal oxide
#

0 is valid

#

Task id number (-1 if scheduling failed)

ember estuary
#

alright, then i can use -1 as my default

#

thank you

desert nest
#
    @EventHandler
    void onPlayerJoin(PlayerJoinEvent e) {
        Player player = e.getPlayer();
        PermissionAttachment pa = player.addAttachment(this);
        for(PermissionAttachmentInfo painfo : player.getEffectivePermissions()){
            System.out.println(painfo.getPermission()); //see if it's actually fetching the correct perms
            pa.setPermission(painfo.getPermission(), false);
        }
        player.recalculatePermissions();
        player.updateCommands();

So I'm trying to remove all default permissions from a player when they join so they can't use them or see them in /<tab>. It works for bukkit commands like /pl but it doesn't for default minecraft commands like /tell. They are definitely negated since I can't use them but they still show in tab complete. Is there something else I have to do to remove those from tab?

royal vale
#

How to update my config in a bungeecord plugin? Like how do I add all the new sections that are created?

round finch
#

org.bukkit.event.inventory.PrepareSmithingEvent.getResult()
what is the right way to make sure the result isn't null

young knoll
#

Check if it’s null?

#

Or air, not sure which it will be

round finch
#

i want to catch it before i set name

proud basin
#

am I changing the java home environment correctly? set JAVA_HOME=C:\Program Files\Java\%Input%

round finch
#

i did Result != null

#

ahh it was the meta

young knoll
#

Meta will only be null on air

tribal gyro
#
public class ItemHandler implements Listener {
    @EventHandler
    public static void onPlayerUse(PlayerInteractEvent event) throws IOException {
        Player player = event.getPlayer();
        ItemStack item = player.getInventory().getItemInMainHand();
        ItemMeta meta = item.getItemMeta();
        if (meta == null || meta.getLore() == null) {
            return;
        }
        if (!event.getAction().toString().startsWith("RIGHT")) {
            return;
        }
        if (meta.getDisplayName().equals(ChatColor.RED+"Health Adder")) {
            PlayerData.changeData(player, 1);
            PlayerData.updateData(player);
        } else {
            meta.getDisplayName();
        }
        if (item.getAmount() == 1) {
            player.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
        } else {
            item.setAmount(item.getAmount()-1);
        }
    }
}
``` anyone know why this is repeating 2 times?
sullen marlin
#

hand

#

event.getHand

#

man that was an api mistake lol

west oxide
#
        String prefix = Plugin.getConfig().getString("prefix");
        return prefix;````
ivory sleet
#

in short

#

actually

#

send your command class

west oxide
#
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        sender.sendMessage(customChat.getprefix());
    }```
ivory sleet
#

entire

west oxide
#

import online.shakiz.CustomChat.customChat;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

public class prefixtest implements CommandExecutor {
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        sender.sendMessage(customChat.getprefix());
    }
}
#

import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

public class customChat extends JavaPlugin {
    @Override
    public void onEnable() {

        this.saveDefaultConfig();
        this.getServer().getConsoleSender().sendMessage("§DCustomChat have been Loaded!");

    }
    @Override
    public void onDisable(){
        this.getServer().getConsoleSender().sendMessage("§DCustomChat have been Disabled!");

    }
    public static String getprefix(customChat Plugin){
        String prefix = Plugin.getConfig().getString("prefix");
        return prefix;
    }

}
ivory sleet
#

first of all

#

what ide do u use?

winged anvil
#

anyone know how to get rid of the "Unable to make field private" error?

ivory sleet
#

I'd love the answer to be intellij, altho eclipse or netbeans also works

crimson terrace
#

they are using intelliJ

west oxide
#

intellij

ivory sleet
#

okey right click customClass

#

then click Refactor

ivory sleet
west oxide
#

ok

ivory sleet
#

then Rename

#

and you rename it to

#

CustomChat

#

notice the capital

west oxide
#

done

ivory sleet
#

Now do the same on prefixtest

#

name it PrefixTest

west oxide
#

done

ivory sleet
#
    public static String getprefix(customChat Plugin){
        String prefix = Plugin.getConfig().getString("prefix");
        return prefix;
    }

now do it for Plugin also

#

it should be named plugin notice the small letter p, not capital that is

winged anvil
west oxide
#

gives me error

ivory sleet
#

you have to change the second line

#

plugin.getConfig()

proud basin
#

camel toe man

ivory sleet
ivory sleet
west oxide
ivory sleet
#

send screenie

winged anvil
#

whats the spigot pastebin

#

!paste

ivory sleet
#

?paste

undone axleBOT
west oxide
#

on getPlugin()

proud basin
#

what's the package location for buildtools?

#

like for bungeecord chat it's net.md-5

ivory sleet
#

tho its with the use of static 🤡

#

Zlaio can you send the entire stacktrace?

west oxide
#

wait i'll try to fix

winged anvil
#

the line its referring to is line 4 in the spigot paste

ivory sleet
#

send the entire listener

#

its just for stacktrace reference

west oxide
#

i gtg frick

#

i'll try to understand this more later

#

thank you SO MUCH conclure

ivory sleet
#

no worries

tardy delta
#

conclure is the best uwu

ivory sleet
#

we still have constructors, static, more on types as well as objects

winged anvil
sullen marlin
#

@torn shuttle oh the issue was BLOCK_MARKER needs a BlockData so it cant be a drop in replacement?

proud basin
#

is this the correct group id for buildtool? ```
<exclusion>
<artifactId>buildtools_1.17.1</artifactId>
<groupId>org.spigotmc</groupId>
</exclusion>

west oxide
sullen marlin
#

why do you need buildtools

#

and no, bt isnt published anywhere

sullen marlin
#

but if it was

proud basin
#

I put it in there

sullen marlin
#

well then it depends what you put it in as

proud basin
#

also becauseI want nms

sullen marlin
#

the source code just does

ivory sleet
#

can you try by putting a nullary constructor @winged anvil in PlayerData

sullen marlin
#

nms != buildtools

ivory sleet
#

nullary constructor = no arg constructor

proud basin
#

I thought nms was in buildtools

winged anvil
#

that returned the same error

proud basin
#

so then what is the point of build tools?

sullen marlin
#

to make nms

proud basin
#

ok

#

anyways

#

so what is the correct artifact id?

ivory sleet
#

idk if lombok could cause any trouble as thats compile time but who knows

#

anyways Zlaio

#

you could create a custom type adapter

winged anvil
#

no idea its weird cause I have another project that does the same thing but it works

ivory sleet
#

yuh

winged anvil
#

a custom type adapter

proud basin
#

oh wait is it net.minecraft

ivory sleet
#
class PlayerDataTypeAdapter extends TypeAdapter<PlayerData> {
  @Override public PlayerData read(JsonReader in) {
    //deserialization
  }

  @Override public void write(JsonWriter out, PlayerData value) {
    //serialization
  }
}

//then when creating gson use smtng like 

static final Gson GSON = new GsonBuilder()
  .registerTypeAdapter(PlayerData.class,new PlayerDataTypeAdapter());
  .build();
#

@winged anvil

winged anvil
#

mannn 💀 💀

ivory sleet
#

ofc u have to do it manually now yeah

round finch
#
@EventHandler
  public void PrepareSmithingEvent (PrepareSmithingEvent e){
      

      if(e.getInventory().getRecipe() != null) {
      CraftSmithingRecipe CRecipe = (CraftSmithingRecipe) e.getInventory().getRecipe();
    

      if (CRecipe.getAddition() == null)return; 
      if (CRecipe.getBase() == null)return;      
      if (e.getResult() == null)return;

      ItemStack First = CRecipe.getBase().getItemStack();
      ItemStack Middle = CRecipe.getAddition().getItemStack();
      ItemStack output = e.getResult();
    
      ItemMeta MidleItemMeta = Middle.getItemMeta();
      ItemMeta Meta = e.getResult().getItemMeta();
 
      Bukkit.broadcastMessage("First " + First);
      Bukkit.broadcastMessage("Middle " + MidleItemMeta.getDisplayName());
      Bukkit.broadcastMessage("Output " + output);
      
     
      Meta.setDisplayName("bob");
      e.getResult().setItemMeta(Meta);

      
      }
      
  }

Middle Item Display returns nothing?

ivory sleet
#

anyways zlaio, the problem is jigsaw

#

aka the java's module project

#

because it basically strongly encapsulate certain packages and their classes

lavish hemlock
#

internal Sun classes 😭

ivory sleet
#

😔

ivory sleet
tribal gyro
ivory sleet
#

maybe by upgrading gson, it could be solved

round finch
#

idk what my problem is

winged anvil
#

how would I do that

round finch
#

i get nothing from meta

ivory sleet
#

you shade in a newer version of gson and relocate

foggy estuary
#

if (Scrooge.isDead() == true)Bukkit.broadcastMessage("test"); why doesn't this work...?

ivory sleet
#

is Scrooge a class?

foggy estuary
#

scrooge isan entity

ivory sleet
#

a variable?

chrome beacon
#

Also why == true

foggy estuary
#
             if (cmd.getName().equalsIgnoreCase("start")) {    
                 Entity Scrooge = Bukkit.getWorld("build").spawnEntity(new Location(Bukkit.getWorld("build"), 0 , 33 ,-181 ),EntityType.VINDICATOR);
                 Entity Pet = Bukkit.getWorld("build").spawnEntity(new Location(Bukkit.getWorld("build"), 0 , 33 ,-181 ),EntityType.PHANTOM);
                 Entity Lightning2 = Bukkit.getWorld("build").spawnEntity(new Location(Bukkit.getWorld("build"),-5, 67 ,-153 ),EntityType.LIGHTNING);    
                 Entity Lightning3 = Bukkit.getWorld("build").spawnEntity(new Location(Bukkit.getWorld("build"),4, 67, -153 ),EntityType.LIGHTNING);
                 
                 Scrooge.setGlowing(true);
                 Scrooge.setCustomName(ChatColor.RED + "Scrooge");
                 Scrooge.setCustomNameVisible(true);
                 Pet.setCustomName(ChatColor.GOLD + "Scrooges Pet");
                 Pet.addPassenger(Scrooge);
                 Pet.setCustomNameVisible(true);    

                 
                 if (Scrooge.isDead() == true)Bukkit.broadcastMessage("test");
                
                     ```
foggy estuary
winged anvil
#

true just do Scrooge.isDead()

chrome beacon
ivory sleet
#

rename Scrooge to scrooge, rename Pet to pet, rename Lightning2 to lightning2 and rename Lightning3 to lightning3

chrome beacon
#

You can remove == true and it will work

ivory sleet
#

it causes a lot of confusion

foggy estuary
winged anvil
#

camelCasing

chrome beacon
#

Then you've done something wrong

ivory sleet
#

thing is

#

it will almost never be false

#

because you're literally spawning that entity right there

#

then just some code later are you checking if its dead

#

like precisely after the entity was created

foggy estuary
#

I see.

#
                ```
#

Olivo, i tried that and it didn't work.

winged anvil
#

also conclure is shading just adding a gson dependency into my pom

ivory sleet
#

no, you're doing that but yeah

#

that'd be whats needed

#

@foggy estuary

#

try !scrooge.isDead()

foggy estuary
#

oki

ivory sleet
#

which will work

foggy estuary
#

Oh i see what you mean by false.

ivory sleet
#

👍

round finch
#

!IsDead() offset so alive

chrome beacon
foggy estuary
#

Makes sense.

winged anvil
#

ive tried upgrading the GSON and i still get the error

#

or at least I think i did

ivory sleet
#

oof

#

might wanna try moshi then

#

since its hella similar to gson

#

but much more modern

quaint mantle
#

And for some reason using annotations instead regular polymorphism

ivory sleet
#

which is quite nice

foggy estuary
ivory sleet
#

nope

#

you'd have to listen to EntityDeathEvent

foggy estuary
#

That's why it isn't working the way i wanted,..

ivory sleet
#

probably lol

eternal oxide
winged anvil
#

no

#

do arrays serialize ?

#

not lists but actual arrays cause I am using arrays in my Group object

next stratus
eternal oxide
#

ItemStack?

winged anvil
#

no Player[]

eternal oxide
#

um, why?

winged anvil
#

the group is made up of players but i might just store their UUID

quaint mantle
#

I think that actually causes problem

eternal oxide
#

Yes, you can;t recreate a Player object so its pointless trying to store Players

quaint mantle
#

use a List of uuids

#

Reject arrays

eternal oxide
#

Your error is because Gson will be unable to create teh Player object

#

Thats the reflection error you are seeing

#

It will also happen with ItemStack metaData

winged anvil
#

gotcha lemme test I just switched to UUID lists

#

?paste

undone axleBOT
winged anvil
eternal oxide
#

UUIDs are going to be difficult, straight to Gson too. The object need a constructor

winged anvil
#

so string

eternal oxide
#

Constructor to create

ivory sleet
#

well

quaint mantle
#

Player creator ☹️

ivory sleet
#

I believe gson actually registers a uuid type adapter

winged anvil
ivory sleet
#

well the only problem should be Player

eternal oxide
#

Gson uses an object no args constructor to instance any object. Then it uses reflection to fill in its fields

quaint mantle
#

its not required tho

winged anvil
#

i just tried string and that didnt work

#

oh wait

ivory sleet
winged anvil
#

yeah that was the problem, storing players I forgot to change my Player creator lol thank you

ember estuary
#

for(byte i = 0; i >= 0; i++)

Why does Intellij say Condition 'i >= 0' is always 'true' ?

proud basin
#

Does this work for anyone else I can't seem to import their library ```
<dependency>
<groupId>it.unimi.dsi</groupId>
<artifactId>fastutil</artifactId>
<version>8.3.0</version>
<scope>provided</scope>
</dependency>

winged anvil
#

because i is always greater than or equal to 0

ember estuary
vale cradle
ember estuary
#

after 127 comes -128

#

its a byte

vale cradle
#

never goes below 0

ember estuary
#

it does

#

atleast if my knowledge is right

vale cradle
ember estuary
#

127 + 1 = -128

#

wym arithmentically

vale cradle
#

You know why 127 + 1 = -128 bitwise?

ember estuary
#

yeah

vale cradle
#

show it to your math teacher and he will slap you

ember estuary
#

well yeah, but numbers are just bits

vale cradle
#

yeah, but you're working with them arithmetically

ember estuary
#

byte a = 127;
a++;
System.out.println(a);

prints -128

vale cradle
#

oh, I didn't know that was possible in java

ember estuary
#

xD

#

i assume Intellij just doesnt know im expecting it

#

and therefore warns me (wrongly)

#

right?

vale cradle
#

yeah

round finch
#

++ = - algebra math

vale cradle
#

I don't like that way to avoid the Numeric overflow tho

ember estuary
#

well, how can i loop over every byte from 0 to (including) 127?

round finch
#

a = a +1;

ember estuary
#

tell me the stopping condition

#

a++ is the simple part

vale cradle
ember estuary
#

:D

#

but unterlined haha
Intellij doesnt like

vale cradle
#

I get warned by:

ember estuary
#

xD

#

"billion times" yeah...

#

they should change that text for byte and short loops

vale cradle
#

as I say, it's pretty counterintuitive

ember estuary
#

:D

hybrid spoke
#

Byte.MAX_VALUE is a thing

quaint mantle
#

👆

#

does anyone know how to fetch a player's name history

torn shuttle
proud basin
#

Anyone know why Fastutil is not wanting to import? (Using maven)

torn shuttle
#

at least that's what fits size-wise

#

it's exactly the size of a dropped barrier block and no longer the size of a barrier effect when placed and viewed while holding a barrier

hybrid spoke
torn shuttle
#

Also I did try the BlockData as shown by Choco and it did not work, or at least I couldn't make it work using the method he showed

quaint mantle
#

how does namemc get it

hybrid spoke
proud basin
#

mojang api I believe

quaint mantle
#

alr ty

proud basin
#

GodCipher can you test something for me?

hybrid spoke
#

what exactly?

proud basin
#

I need you to add something your pom.xml and see if it works

#

I'm not sure if it's on my end so I need someone else

quaint mantle
#

what data value is this

vale cradle
hybrid spoke
quaint mantle
#

how do i convert it to readable time

hybrid spoke
vale cradle
proud basin
#

So you won't test it for me 😦

quaint mantle
hybrid spoke
#
        <dependency>
            <groupId>it.unimi.dsi</groupId>
            <artifactId>fastutil</artifactId>
            <version>8.2.2</version>
        </dependency>

works for me

proud basin
#

Can you use Int2LongMap?

#

I can't even use 8.2.2

#

doesn't exist for me

hexed hatch
#

does spigot support changing the price of combining items in an anvil?

sullen marlin
#

probably?

#

look at the anvil event

golden turret
#

help pls

hybrid spoke
acoustic pendant
#

why is this not using &c?

#

config.addDefault("DamageIndicatorHologram", "&c %damage_message%");

golden turret
#

look at your code

acoustic pendant
#

?

eternal oxide
#

translate

acoustic pendant
hybrid spoke
#

you are just translating the first string

#

not the second

golden turret
#

then you did the right code in the other plugins

hexed hatch
sullen marlin
#

might not be possible

#

is it in the protocol?

hexed hatch
#

I'm not in deep enough to know

#

I'll see if I can find out, is there a resource that makes figuring that out easier?

sullen marlin
#

can you try AnvilInventory#setRepairCost

#

it might work

#

(event.getInventory.setRepairCost)

hexed hatch
#

ooh, that'll do it

#

thanks

sullen marlin
#

emphasis on might lol

#

interacting with things like that in prepare events is tricky

hexed hatch
#

I'll test it and let you know what happens

hexed hatch
golden turret
#

i need to do a crafting system

#

im stuck on this for a long time

sullen marlin
#

cant you just use a crafting table

golden turret
#

would be really good if i wasnt making a auto crafter

sullen marlin
#

if not, its going to be a fair few lines of code

patent horizon
#

whats the method for parsing a text as it's material value

sullen marlin
#

the vanilla crafting system is hundreds of lines

golden turret
sullen marlin
#

Material or block?

patent horizon
#

item material

golden turret
#

wdym

patent horizon
#

for guis

golden turret
#

a

sullen marlin
#

Material.matchMaterial

patent horizon
#

awesome thanks

hexed hatch
golden turret
#

yes but i would like to know where is the code

acoustic pendant
#

i got it 😄

sullen marlin
#

you couldnt just copy paste it anyway

spice juniper
#

Im using eclipse and on my plugin and config.yml files there are question marks, does anyone know why this is? Its the first time I see this.

sullen marlin
#

what question marks?

golden turret
#

the code would be awesome too, but i really want is the idea

sullen marlin
#

ShapedRecipe / AutoRecipeStackManager

#

as you can see its very complicated

#

though its mojang, so probably overcomplicated

round finch
#

if(e.getInventory().getRecipe() != null) {
SmithingRecipe CRecipe = (SmithingRecipe) e.getInventory().getRecipe();
CRecipe.getAddition().getItemStack().getDisplayName() it gives me nothing
}

sullen marlin
#

you could definitely do it much simpler

golden turret
#

ok thanks

#

i will try

sullen marlin
#

are smithing recipes the ones that copy their input nbt

#

if so, that's why

round finch
#

i want the name of the item in the middle

#

on placing

acoustic pendant
#

is it better creating info in the config.yml like this or doing it manually?

worldly ingot
#

Option is yours

#

I'd rather make a file and just save it, but if you would rather write those defaults in source, go for it

spice juniper
opal juniper
#

verify then

acoustic pendant
opal juniper
#

yes

#

then saveResource

worldly ingot
#

If you're seeing question marks in your editor, you probably have a lower source encoding than is used in the file itself, J4KOB

worldly ingot
#

Oh

#

That's git

opal juniper
#

lol

worldly ingot
#

Just means Git hasn't tracked it 😛

acoustic pendant
#

by the way, to write notes in the config yml, how is it suposed to be?

sullen marlin
#

#comment

opal juniper
#

python cool

acoustic pendant
opal juniper
#

yaml copied python

#

yes

hexed hatch
#

yes

acoustic pendant
#

ty

spice juniper
sullen marlin
#

you were answered....

opal juniper
#

yeah - it’s git not tracking them

spice juniper
#

ohh

worldly ingot
#

Can either disregard, or if you intend on using git you can track and commit them

round finch
worldly ingot
#

git add *.yml, git commit -m "Added yml files", git push

#

Boom it's like magic

gilded pilot
#

Can I publish plugin extending premium plugin API when it loads even without it?

#

I post in development because it's related to developing.

#

@austere cove

austere cove
#

as per the guidelines

#

(premium) Resources must not depend on other premium resources.

gilded pilot
#

So what about aacaditions?

#

They load without but just spam install aac

hybrid spoke
#

afaik you are allowed to publish it aslong as you dont have to pay for it

gilded pilot
proud basin
#
<dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot</artifactId>
            <version>1.17.1-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
``` this is the correct one to create nms correct?
sullen marlin
#

yes

acoustic pendant
#
reload:
  message:
    - "&cDamageIndicator reloaded!"
    #- "You can add more lines too!"

CancellingCrits: false  #Default in false, i'll recommend you to leave this in false except you have a custom crit plugin

enablingHolograms: true #Enable and disable holograms when you hit entities

DecimalsAboveOne: '#'  #If your damage is more than 1 it will give a number without decimals if you want to give more decimals add a .## (You don't have to add # to give more than 1 number like 30)

DecimalsUnderOne: '#.#' #the same as above but with less than 1 damage.

DamageIndicatorHologram: "&c %damage_message%"  #The message it appears when you hit an entity %damage_message% is the damage variable IMPORTANT will only work here.```

I have it like this but in the plugin folder config it doesn't appear
hybrid spoke
austere cove
#

resource staff will most likely approve prem resources soft depending on a prem resource as long as the main functionality of the plugin keeps working

#

but I'm not resource staff so idk ¯_(ツ)_/¯

gilded pilot
gilded pilot
sullen marlin
#

its from 2016, unlikely the rule existed then

austere cove
#

^ that

acoustic pendant
sullen marlin
#

itll only appear if you use copyResource and dont save over it

#

api doesnt support comments yet

gilded pilot
acoustic pendant
#

copyResource?

sullen marlin
#

saveResource idk

gilded pilot
#

The 20$ thing was enforced backwards too

sullen marlin
#

look in the JavaPlugin methods

#

no it wasnt

#

most rules like that are not backwards enforced

gilded pilot
#

Alright but what should I do than

#

When it's free it's ok?

sullen marlin
#

yes

gilded pilot
#

So it's not to do depend on depend

#

And not make people buy plugin for plugin, etc

misty current
#

i'm tryna pass an object as a parameter in an interface implemented method, but broadcasting it shows 2 different instances

#

like passing it was creating a new instance of the object

golden turret
#

so i decided to create a fake crafting table for my auto crafter

#

basically i have some items somewhere and i want to place them in my auto crafter

#

in all possibilities possible

#

and check if that matches the recipe shape

#

how could i do that

foggy estuary
#

?paste

undone axleBOT
round finch
#

i fixed it myself Smithing

e.getInventory().getItem(1).getItemMeta().getDisplayName()

also it return nothing if the wasn't renamed

foggy estuary
#

player11 is in red and i cant figure out what to add to make it not

young knoll
#

Well you haven’t declared player11 anywhere

#

You can’t just pull a player out of nowhere

round finch
#

e.getPlayer().getLocation();

#

check for the specific location

#

if player is at that location give Effect and then remove if they're not in that location

#

@foggy estuary

young knoll
#

Check for distance

round finch
#

yes

young knoll
#

Being at an exact location is very hard

round finch
#

like x y z

young knoll
#

distanceSquared already exists

round finch
#

i never knew

young knoll
#

So does distance, but that is slower

foggy estuary
#

hmmm

#

does this seem alright then..?

#
      public void blockBreak(BlockBreakEvent event) {
            {
            Player player11 = event.getPlayer();
            Block blockloc = player11.getWorld().getBlockAt(-2, 66, -153);
            Material material = blockloc.getType();
            Player player1 = event.getPlayer();
            if(material.equals(Material.GOLD_BLOCK))
            Bukkit.broadcastMessage(ChatColor.GOLD + "YevTheDev is the thief!");
            if(material.equals(Material.GOLD_BLOCK))
            player1.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, 40000, 10000));
            if(material.equals(Material.GOLD_BLOCK))
            player1.playSound(player1.getLocation(), Sound.BLOCK_BEACON_POWER_SELECT, 2F, 1F);
            
            }
      }
    }```
tender shard
#

always use distanceSquared if you don't really need the exact distance

round finch
#

wait what about if(Location = e.getPlayer().getLocation())?
@young knoll

#

i need to check

foggy estuary
#

it works

round finch
#

if that works

foggy estuary
#

tthanks itsvoll

#

and coll

young knoll
#

And like I said, two locations will almost never match

round finch
#

equals is better for string?

tender shard
#

is that a real question?

#

equals compares object's properties, == compares whether it's actually the "same" object

young knoll
#

Memory reference to be specific

tender shard
#

yep

young knoll
#

Used for primitives and enums mostly

round finch
tender shard
#

rule of thumbs: if you're not sure on what to use, use equals

young knoll
#

Even then, locations use double coordinates

#

So they are quite precise

tender shard
#

"quite" = "extremely" ^^

round finch
#

Location(World world, double x, double y, double z, float yaw, float pitch)

tender shard
#

what are you trying to achieve?

worldly ingot
tender shard
#

almost every object has its own equals method

round finch
#

what the differences guys?

tender shard
#

class*

worldly ingot
#

Hence *defaults to

tender shard
worldly ingot
#

Object#equals()

tender shard
#

you have a class called Person

class Person {
  String name;
  public Person(String name) {
    this.name=name;
  }
}```
#

you can now do this:

#
Person person1 = new Person("mfnalex");
Person person2 = new Person("mfnalex");
#

person1 != person2 but person1.equals(person2) will be true

#

(If it has an equals() method that compares the names)

young knoll
#

Well it would if you overrode .equals

tender shard
#

as said

round finch
#

person1 != person2 vs person1.equals(person2)?

tender shard
#

yes

#

let me explain

round finch
tender shard
#

== simply compares whether both objects are exactly THE SAME object

#

while MOST of the time, most objects have an "equals" method

tender shard
#

and that method doesn't check whether both objects are exactly the SAME object, but whether all the properties of that objects are the same

#

you know what I mean? ^^

#

it's hard for me to explain

round finch
#

memory stuff?

tender shard
#

I will make a simple real life comparison

#

imagine you have your school testimony

#

now you put it into your printer and print a copy

#

they will be equal, but they won't be ==

#

it's two different documents with same content

lean gull
#

i could still use help with this

tender shard
#

so they are equals() but they aren't ==

lean gull
#

if anyone's up for it

round finch
#
String s1 = "HELLO";
String s2 = "HELLO";
String s3 =  new String("HELLO");
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false
System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // true

true
false
true
true
tender shard
#

that's very specific

round finch
#

it was in your link

tender shard
#

first comparison will be true although they technically aren't but that's just because the JVM caches Strings

#

pls ignore Strings for a second

round finch
#

they equals the same but arent 100% the same right?

tender shard
#

yes normally that's true

#

object1 == object2 does this: "Yo, Java, does both, object1 and object2 refer to the same RAM address?"

desert nest
#

oh man I have an issue with equal strings but now I don't want to post it 😆

ivory sleet
#

well basically
if and only if a == b then a must be b

tender shard
#

Another rule of thumbs: for Strings, ALWAYS ALWAYS ALWAYS use equals() unless you REALLY REALLY know what you're doing

#

strings are a bit of a special case in terms of == and equals

#

you should ALWAYS use "equals" unless you expicitly know the difference between equals and == and know what you're doing

desert nest
#

I am comparing 2 strings that are both printing to the same thing in console, but when I compare with .equals it comes out that they are different 🤔

tender shard
#

then they are indeed different

#

try to print them out

#

System.out.println

#

check it out, there MUST be a difference

desert nest
#
    @Override
    public void onPluginMessageReceived(String channel, Player player, byte[] message){
        if (channel.equals("minecraft:brand")){
            String brand = new String(message);
            System.out.println(player.getName() + " is connecting with: " + brand);
            if (!brand.equals("vanilla")){
                System.out.println("not vanilla!");
            } else{
                System.out.println("vanilla!");
            }
        }
    }
#

Console is printing not vanilla

young knoll
#

Does brand have trailing spaces or something

desert nest
#

I tried stripping unless I did something wrong

tender shard
#

add System.out.println(channel) and see what it shows

#

oh sorry

#

I meant

#

System.out.println(brand)

desert nest
#

ah ok

young knoll
#

I mean they are

#

Print it with characters on each side to show it there are any leading or trailing spaces

ivory sleet
#

yuh or use smtng like hashCode which if they are unequal in terms of hash, then they'd have totally different hashCodes

desert nest
#

ok the brand prints as vanilla

#

but the if/else after prints not vanilla

tender shard
#

pls copy paste the output

round finch
#

[MEME] suffocated debugger exists but System out print

tender shard
#

there's probably some invisible characters inside the output then

desert nest
#
[17:16:57] [Server thread/INFO]: vanilla
[17:16:57] [Server thread/INFO]: Not vanilla!

like that?

lean gull
#

pls someone i can't continue

young knoll
#

You can decompile the output jar

#

Or go into the folders generated by buildtools and look at the source there

lean gull
#

what?

young knoll
#

What?

lean gull
#

what am i supposed to do?

young knoll
#

I just told you

#

Decompile the output jar or look at the source in the various folders

lean gull
#

idk what that means

foggy estuary
#

ok so this is so weird...

#
      public void blockBreak(BlockBreakEvent event) {
            {
            Player player11 = event.getPlayer();
            Block blockloc = player11.getWorld().getBlockAt(0, 24, -266);
            Material material = blockloc.getType();
            if(material.equals(Material.GOLD_BLOCK))
            Bukkit.broadcastMessage(ChatColor.GOLD + "YevTheDev is the thief!");
            if(material.equals(Material.GOLD_BLOCK))
            player11.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, 40000, 10000));
            if(material.equals(Material.GOLD_BLOCK))
            player11.playSound(player11.getLocation(), Sound.BLOCK_BEACON_POWER_SELECT, 2F, 1F);
            
            }
      }
    }```
#

idk why but whenever i break a block now, it gives me the yevthedev is the thief ect

young knoll
#

Oh boy..

#

Well is the block at that location a gold block

foggy estuary
#

yes

young knoll
#

Also you have no {} on your ifs

#

Then of course it will

foggy estuary
#

oh shit

#

LOL

#

i didnt even realise

young knoll
#

Also also you don’t need to repeat the same if condition 3 times

round finch
#

wut going on here with the backets?

young knoll
#

Strange things

round finch
#

Oh lemme guess that was probably the if check

young knoll
#

And player11 is a weird variable name

round finch
#

he started

foggy estuary
#

im stupid and just copy pasted my old code and put in this and wondered why it werent working

foggy estuary
round finch
#

pro coders be like
player1
player2
player3
player4
player5
😂
ironic joke

foggy estuary
#

^

candid galleon
#

player_1

round finch
#

Anyway ! how it going with the code

proud basin
#

How could I calculate a players horizontal friction?

foggy estuary
round finch
foggy estuary
#

my server crashed so ill have to check in a sec lol

desert nest
#

im still getting bullied by a string comparison, fun stuff!

foggy estuary
#

hm...

#

ok

#

i have no clue now...

#

      @EventHandler
      public void blockBreak(BlockBreakEvent event) {
            
            Player player = event.getPlayer();
            Block blockloc = player.getWorld().getBlockAt(0, 24, -266);
            Material material = blockloc.getType();
            if(material.equals(Material.GOLD_BLOCK)) {
            Bukkit.broadcastMessage(ChatColor.GOLD + "YevTheDev is the thief!");
            player.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, 40000, 10000));
            player.playSound(player.getLocation(), Sound.BLOCK_BEACON_POWER_SELECT, 2F, 1F);
            
            }
      }
    
}
#

still when i break any block it gives me this

round finch
#

get block from BlockBreakEvent

check if it is equals that specific location for the gold block

foggy estuary
#

wdym

#

it should just say, "hey i see ur breaking that gold block at that specific location... ima give u the perks now"

#

instead of giving me perks at any block i destroy

young knoll
#

Yeah

#

But you are constantly checking if a gold block is at that location

#

So unless you break it, it’ll always be true

foggy estuary
#

i see

#

So. how do i prevent that.

young knoll
#

Check if the block you are breaking is at that location

#

And if it’s a gold block

round finch
#

Like

if(Player.getName().equals("Joe")){
it will do Stuff for joe
}

hybrid spoke
#

dont use this operator to compare strings

karmic grove
#

how do i specify an api version :_)

young knoll
#

api-version: in plugin.yml

karmic grove
#

ok thanks

#

it would be 1.17.1 right

hybrid spoke
#

nope

#

1.17

karmic grove
#

oh ok

desert nest
#

@ivory sleet btw I just checked and the hashcodes for my 2 string are completely different, no idea how :/

round finch
#
 Location loc = new Location(Bukkit.getWorld("World"),0,70,0);
 if(loc.distanceSquared(e.getBlock().getLocation()) == 0) {
 Bukkit.broadcastMessage("You Broke at the Right place"  + loc.distanceSquared(e.getBlock().getLocation()));  
 } else {
 Bukkit.broadcastMessage("You Broke at the Wrong place"  + loc.distanceSquared(e.getBlock().getLocation()));  
 }  
hybrid spoke
#

but for what do you need the hashcode

karmic grove
#

so it says it cant find it but it exists .....

desert nest
#

I have 2 strings that are printing the exact same but .equals says they are different, they said to check the hash codes to see if they are different

foggy estuary
#

oh shit

#

thank you im off my pc now but i can try that tomorrow

#

i appreciate it !

round finch
#

no problem

#

i just ran the code AFthumbsupwink

#

so no problem there

#

@foggy estuary you can kinda thank @young knoll for making it so simple

young knoll
#

Use distanceSquared

#

No need for the square root operation

round finch
#

lemme test it 🙂

hybrid spoke
karmic grove
desert nest
round finch
hybrid spoke
karmic grove
#

ohhhhhhhhhhhh

#

lol

#

thanks

hybrid spoke
desert nest
#

branded printed vanilla, the if/else printed not vanilla

#

if you scroll down a bit from the code I posted the output and such

hybrid spoke
#

can you print the length of brand?

#

i have there a presumption

full forge
#

is there a better way to test plugins than stopping a server, resetting it, then starting it back up again?

hybrid spoke
full forge
#

damn, that sucks

ivory sleet
#

mockbukkit

#

technically not spigot

#

but it has some mocks to emulate the most necessary things

#

believe minidigger also has some thing for acceptance test or if it was integration tests

desert nest
#
[18:13:32] [Server thread/INFO]: brand length: 8
[18:13:32] [Server thread/INFO]: vanilla string length: 7

@hybrid spoke I think you may be onto something

hybrid spoke
#

exactly

#

your string takes the length of the byte array

#

trim the string, that will fix it

desert nest
#

Oh I stripped it, that must be different

#

Yeah I'm like 1 day into Java lol

#

Yep that fixed it! Thank you so much 😁

#

wait so it was extra whitespace then?

hybrid spoke
#

more or less, yeah

#

your string took the length of the entire byte array and used to be "vanilla\0" or smth but the \0 gets vanished when printed out. trim() considers \0 as a whitespace

desert nest
#

oh interesting, yeah I guess that makes sense considering the message.length is also 8

#

appreciate the help!

hybrid spoke
desert nest
#

a bit above my head but I think I get the basics

#

While I have you here you wouldn't happen to know why default minecraft commands aren't removed from my tab completion list even though I'm negating the perms for them would you? 🤔

proud basin
#

Anyone know what buffer is used for?

paper viper
#

that you can write data in

#

and read later on

#

for example, channels use buffers

proud basin
#

I'm not talking about that

#

That doesn't sound right

paper viper
#

lol

proud basin
young knoll
#

Hmm, it has both a getter and setter

#

So other classes must use it

paper viper
#

thats bad naming

#

lol

proud basin
#

yeah

#

so im assuming you don't know what it is

#

or what it used for

paper viper
#

no, because that clearly isnt a proper name

#

a buffer is a block memory which is wrote onto/read

#

that is the universal meaning

lean gull
#

i still need help with this btw, if anyone can help

paper viper
lean gull
#

i wanna learn how to use it

#

y?

paper viper
#

no please dont

#

lmao

lean gull
#

y tho

paper viper
#

you will kys

lean gull
#

sheeesh

paper viper
#

because nms code is DOG shit

#

and its a pain to handle

proud basin
#

Is it true you can make your plugin support plugins below 1.17.1 without nms?

#

I know that there is Reflection but that's poop

worldly ingot
#

?

#

Use API?

proud basin
#

but then you are make a new class everytime for each version

worldly ingot
#

I'm confused

#

What are you doing that would only work on 1.17.1?

proud basin
#

Methods can only be used on 1.17.1 and 1.17

worldly ingot
#

Are you referring to server internals?

proud basin
#

mhm

worldly ingot
#

Oh, then why did you say "without NMS"? lol

#

Yeah, your option is either reflection, abstraction (class for each version), or use Bukkit API

young knoll
#

I would advise for the second (well third but yk)

proud basin
#

No fourth option?

young knoll
#

Magic

proud basin
#

hm

tidal hollow
#

I was making mobs with Armor and when testing them they release their armor, how can I make that not happen?

true perch
#

What's the most efficient way to read/write an ItemStack object through locally stored data?

sullen marlin
#

Best to just use yamlconfig

lean gull
#

does anyone have a good tutorial on nms?

paper viper
#

b r u h

lean gull
#

what

paper viper
#

no lmfao, nms has no documentation at all

#

thats why you should avoid it if you can use api

#

what even are you doing?

#

you shouldn't "learn" NMS

#

you only use it when you need it

lean gull
#

all i know is that nms can be used to do things that the spigot api does not have, and therefore i want to learn how to use it

paper viper
#

do you even know what it stands for?

#

its not even really api tbh

#

lol

lean gull
#

like for example rn i want to make a custom head itemstack, but for that there's a method from a forums thread that uses gameprofile, and idk what gameprofile is and the method doesn't work for me

#

nms stands for net minecraft server

paper viper
#

its 1 class

lean gull
#

i wanna be able to make it by myself, without using other people's code

#

do you know what i need to learn in order to make that?

paper viper
#

you cant

lean gull
#

well if someone did it then obviously i can

paper viper
#

im sorry, but getting heads is something id just not want to deal with myself

#

just use someone else's working code

lean gull
#

i don't like using other people's code

paper viper
#

you can read their code tho

#

and understand it

lean gull
#

i can't

paper viper
#

that is someone else's code

#

lol

lean gull
#

i spent a second looking on it and got confused

#

for example, what is base64?

paper viper
#

Google

#

and also base64 is a very common topic

#

in computer science

#

like super super common lol

lean gull
#

ok i googled it and idk what they mean

#

what's encoding

paper viper
#

dude is this seriously that hard to understand

lean gull
#

yes

#

ok forget it, i'll just wait for someone else to help

paper viper
#

nobodys going to help you learn NMS

#

cause nobody has tutorials on it really

#

its like the dark matter of space

lean gull
#

you can stop now

eternal oxide
#

No one wants that headache

paper viper
#

exactly

paper viper
#

you gotta change up your question

lean gull
#

this is like the third time you said "no, you can't do that"

eternal oxide
#

When you find something specific you want to do that the API does not cover, come back and ask..

paper viper
#

yep, and hence why i say

#

dont

lean gull
#

custom heads, as i've said

paper viper
#

learn

#

NMS

lean gull
#

pulse just stop, ok?

#

i do not want your help

paper viper
#

dude the library i posted above?

#

its literally 1 damn class

lean gull
#

i have said that i don't want to use other people's code, right? did i just dream it?

#

i'm just gonna ignore you from now on

quaint mantle
#

I'm new to plugin creation and I'm working on creating a ChatColor plugin however when I type /chatcolor the GUI doesn't open.

#

Can someone look at my code and help me fix it?

paper viper
lean gull
#

space you should use technovision's tutorial on custom inventories

paper viper
#

listen to us and elgar

#

???

#

please

#

Technovision is absolutely bad

#

bad coding conventions

#

Dont listen to him

#

Please

lean gull
#

yay negativity

#

wooo

quaint mantle
eternal oxide
#

?paste some code @quaint mantle

undone axleBOT
paper viper
#

I am not even kidding technovision is absolute dog shit

#

if you watch him

#

stop

lean gull
#

pulse i have not heared a single positive thing from you in the past 10 mins that we've been talking

quaint mantle
#

This is my first week so if I'm missing something crucial I hope you understand haha

lean gull
paper viper
#

dude, ive been in this discord wayyy longer than you. ive seen too many people like u b4 xD

#

stop acting like im going to give a fuck

eternal oxide
candid galleon
#

What happens when you run the command @paper viper ?

lean gull
#

yeah i'm just gonna go back to ignoring you, you clearly do not want to be nice

quaint mantle
#

Thanks haha that was easy

candid galleon
#

Why would you think you set aliases?

lean gull
#

can anyone help me with making my own code for custom heads?

candid galleon
#

?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. Create a thread in case the help channel you are using is already in use!

quaint mantle
#

oh wait

#

I'm dumb

#

I put the command as chatcolor not changecolor

paper viper
candid galleon
#

Whoops, looks like I did, my bad

paper viper
#

All good

lean gull
final fog
#

Whats the difference between the PlayerJoinEvent and the PlayerLoginEvent

#

And which one should I use when making a ban plugin

final fog
#

oh that's neat

young knoll
#

If you can't use an async one, use login

final fog
#

disallow() and allow()

young knoll
#

mhm

paper viper
#

also did you even add the repo

lean gull
#

i just used the class, forget it

eternal oxide
#

He did, he needs to refresh his maven or invalidate caches

paper viper
#

he copied the class over instead 💀

eternal oxide
#

oh 😦

final fog
lean gull
eternal oxide
#

there is no player in teh pre login event

young knoll
#

there is uuid

#

Which is what you should store bans by anyway

final fog
#

oh

#

right

young knoll
#

Or IP, which you can also get

final fog
#

at the same time im also kicking the player

young knoll
#

You can just disallow

final fog
#

god damn im slow

timber whale
#

is anyone comfortable with libs disguise api?

dreamy dove
#

hey does somone have experience with bedrock texturepacks I want to set a custom texture when an item hits a specific durability

final fog
#

@young knoll sorry to bother you but I can't find anything on what I would use for the leaving part

#

mind helping me out rq?

young knoll
#

Leaving part?

final fog
#

Yeah im currently using PlayerKickEvent which is probably what I shouldn't be using

#

Mainly im just trying to remove the Player has left the game

young knoll
#

Ah

#

IIRC that is the only way

proud basin
paper viper
#

why would they call it "buffer"

proud basin
#

no clue

paper viper
#

it should be more like error something you know

#

like you know in science

#

when you collect evidence

#

you have to account for possible margin of error

#

it should be called that

buoyant viper
paper viper
#

like you know ph buffers