#help-development

1 messages · Page 1612 of 1

fluid cypress
#

how do i store a long int in a yaml file? just the number? or the number and an L?

whole stag
#

that would be nice if it was an actual event

quaint mantle
#

hmm okay

valid crag
#

probably projectile throw/shoot event

#

if not, fall back to player interact event

whole stag
#

Only throw event is for eggs

#

Projectile event is for arrows

valid crag
#

interact event it is then

#

get rekt

#

why do we event have any events

eternal oxide
valid crag
#

we should just use interact event for everything

eternal oxide
#

Egg throw is actually when the egg hits the ground and decides if it will hatch

valid crag
#

brilliant

eternal oxide
#

Projectile is for all projectiles

quaint mantle
#

hey how do i get all armour stands and kill them

#

i just for(Entity e : world.getEntities())

#

if e.getType() ==

#

etc.?

whole stag
quaint mantle
#

ok well this doesnt actually remove the armour stands

fluid cypress
#
worlds:
  unexisting_world:
    1:
      x: -123
      z: -766
    2:
      x: 648
      z: 478
  another_unexisting_world:
    1:
      x: -3577
      z: -1364
    2:
      x: 3135
      z: 2642
var worlds = (Map<String, Map<Integer, Map<String, Integer>>>) config.get("worlds");
java.lang.ClassCastException: class org.bukkit.configuration.MemorySection cannot be cast to class java.util.Map (org.bukkit.configuration.MemorySection is in unnamed module of loader 'app'; java.util.Map is in module java.base of loader 'bootstrap')
valid crag
#

getting a section from a config returns a MemorySection

#

not a map

fluid cypress
#

it worked before, i think

#

and how do i convert that memory section into a Map<String, Map<Integer, Map<String, Integer>>>?

valid crag
#

you'll call getConfigurationSection to get a ConfigurationSection

#

and then call .values on it which will give you a Map<String, Object>

#

i'm not sure if the second level maps are going to be memorysections or maps, but probably maps

fluid cypress
#

really?

#

thats a lot of work

valid crag
#

working with configurations directly is ass

#

you're supposed to do the serialization outside of your main code

fluid cypress
#

that means there is an indirect way...?

valid crag
#

you could create a class named ConfiguredWorld and make it ConfigurationSerializable

#

and then call config.getSerializable("worlds." + worldname, ConfiguredWorld.class)

fluid cypress
#

mm

#

but i want it to be simple on the yaml part

valid crag
#

the deserializer you'd write in the new class would take care of all the config bullshit

fluid cypress
#

so, i want that syntax

#

in the yaml file

valid crag
#

well, then instead of working with maps

#

you want to work with ConfigurationSections

fluid cypress
#

how is that

valid crag
#

it's still cancer, but pretty similar to working with maps

#

a configurationsection is just a sort of map, anyway

fluid cypress
#

can u give me a little example, having 3 nested maps confuses me a bit

valid crag
#

ConfigurationSection worlds = config.getConfigurationSection("worlds");

#

for (String worldName : worlds.getKeys(false)) {

#

ConfigurationSection world = worlds.getConfigurationSection(worldName);
for (String pointName : world.getKeys(false)) {
ConfigurationSection point = worldSection.getConfigurationSection(pointName);
int x = point.getInt(x);
int z = point.getInt(z);

#

as you can see, it's not fun

quaint mantle
#

i still dont know why the entities arent being killed

valid crag
#

maybe they grew a pair

#

they became ungovernable

quaint mantle
#

w

valid crag
#

your feeble authoritarian regime is going to fall

#

your genocide will not pass

quaint mantle
#

ok so what could i possibly be doing wrong

#

because the entities im triyng to kill...

#

their customname is NOT null

valid crag
#

consider calling remove() instead of damaging them

quaint mantle
#

their name IS visibl

#

and they are EntityType.ARMOR_STAND

valid crag
#

i don't know if armorstands work properly with damage

#

beyond that, throw some sysouts at it and see why the if condition is failing

quaint mantle
#

ahhhh

valid crag
#

or if the loop is even running in the first place

quaint mantle
#

yeah

#

i'll do that idk why i didnt do that

quaint mantle
#

yikes

valid crag
#

armorstands are fucking batshit

quaint mantle
#

yeah

valid crag
#

they are treated as living entities

#

so they will drown underwater

#

and other brilliant shit like that

quaint mantle
#

yeah so the loop isnt actually running

#

it could be because i have it on the ServerLoadEvent ?

valid crag
#

the world is probably not loaded by that point yes

quaint mantle
#

though the server's worlds exist way before this event is called iirc

valid crag
#

listen to the WorldLoadEvent or something maybe

quaint mantle
#

well the ServerLoadEvent is the final loading event

#

yeah

#

Hey @eternal oxide, I've got some bad news. The PlayerInteractEvent is not event called when I left click on the itemframe

#

it is called if I click at the bottom of its block

#

but not on it directly

valid crag
#

the entity damage event is probably called instead

quaint mantle
#

entity interact event

#

itemframe is an entity for some reason

valid crag
#

entity interact event should be caught by the regular interact listener

#

if i remember the class hierarchy right

#

let me check

#

yeah apparently not

quaint mantle
#

yeah idk why

#

its wack asf

valid crag
#

isn't that only for right clicks though

quaint mantle
#

so yeah the

#

WorldLoadEvent doesnt work either

valid crag
#

make your plugin load on startup as opposed to postworld

quaint mantle
#

pretty sure it already loads on startup

valid crag
#

unless you've set load: startup in plugin.yml, the load phase defaults to postworld

#

which is after the main worlds have loaded

#

and thus your listener won't be registered in time to hear them to load

quaint mantle
#

i'm gonna try something

#

i'll incorporate it into onj oin and on quit

valid crag
#

uh

#

can a plugin place multiple plugin tickets on a chunk

#

probably not?

wary harness
#

do u think this is laggy

#

beasttokens part ?

quaint mantle
#

ok so but heres the thing @valid crag

#

i have

#

a for(

#

that gets the worlds

#

to set their gamerules

#

in the serverloadvenvet

valid crag
#

assuming that is on the main thread, yes, that is laggy and stupid

#

it's doing file IO on the main thread

eternal oxide
valid crag
#

on the fucking block break event

#

yeah, figured

#

i guess I have to manage duplicate tickets myself

eternal oxide
#

It doesn;t matter how many you place, so long as you remove once

valid crag
#

yeah but the thing is that I have multiple areas that I want to load chunks on a certain condition

#

if multiple areas occupy the same chunk, I want the ticket to be removed once all areas fail the condition

eternal oxide
#

ah, so one may remove the ticket of another

valid crag
#

so i'm probably going to tally the present areas in a Map<ChunkKey, Set<Area>> or something

eternal oxide
#

yep

cold tartan
#

i have an issue with the nbt api,
for some reason it doesnt seem to be saving,
i run this code:

NBTEntity p = new NBTEntity(event.getPlayer());
p.setBoolean("GeneratedSkills", Boolean.TRUE);
p.setInteger("SkillTreeAvailablePoints", 69);

p.setInteger("SkillTreeAgilityLevel", 12);
p.setInteger("SkillTreeAgilityPoints", 2);

p.setInteger("SkillTreeMiningLevel", 9);
p.setInteger("SkillTreeMiningPoints", 4);

p.setInteger("SkillTreeFlyingLevel", 14);
p.setInteger("SkillTreeFlyingPoints", 8);
``` and later when I run this code:
```java
NBTEntity p = new NBTEntity(player);
availablePoints = p.getInteger("SkillTreeAvailablePoints");
agilityLvl = p.getInteger("SkillTreeAgilityLevel");
agilityPoints = p.getInteger("SkillTreeAgilityPoints");
miningLvl = p.getInteger("SkillTreeMiningLevel");
miningPoints = p.getInteger("SkillTreeMiningPoints");
flyingLvl = p.getInteger("SkillTreeFlyingLevel");
flyingPoints = p.getInteger("SkillTreeFlyingPoints");

System.out.println(availablePoints);
System.out.println(agilityLvl);
System.out.println(agilityPoints);
System.out.println(miningLvl);
System.out.println(miningPoints);
System.out.println(flyingLvl);
System.out.println(flyingPoints);
``` and it just doesn't work, it just returns 0
#

and i supposed to run some sort of saving code?

valid crag
#

use the pdc

cold tartan
#

ik, its just so much easier to look at with this

valid crag
#

could always write a wrpper that makes the pdc look nice as well

cold tartan
#

wait, i think i figured it out

#

i this i needed to use the variable "nbt" as in:

NBTCompound nbt = p.getPersistentDataContainer().getOrCreateCompound("SkillTree");
``` instead of variable "p"
#

yep

#

that worked

vivid zodiac
#

task.runTaskTimer(null, 0, 0); il faut mettre quoi dans null (plugin plugin) si on est pas dans la class principal ?

#

c'est bon j'ai mit n'importe quoi ça marche

quartz flicker
#

i did this to summon random anvils with fawe api but the anvils staying in air how to fix it?

   try (EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(new BukkitWorld(Bukkit.getWorld("Anvilmayhem")), -1)) {
            RandomPattern pat = new RandomPattern();
            BlockState air = BukkitAdapter.adapt(Material.AIR.createBlockData());
            BlockState anvil = BukkitAdapter.adapt(Material.ANVIL.createBlockData());


            pat.add(air, 1.0-percents);
            pat.add(anvil, percents);
            editSession.setBlocks(region, pat);
        }```
tulip sky
#

String b = event.getInventory().getTitle();
if (b == "OneBlock Menu") {

    }  //

it is exactly the same value for a name even if I print it, but the comparison always comes out false

sullen marlin
#

you cant == strings

quartz flicker
paper viper
#

Don't compare title names for Guis man

tulip sky
tulip sky
#

InventoryClickEvent

tulip sky
stone sinew
sullen marlin
#

you cant == strings in c++ either

tulip sky
quaint mantle
#

getMaxStackSize is 64 for a chest inventory, and changes with the inventory type, right?

quaint mantle
stone sinew
#

Yeah idk. It says for itemstack but doesn't allow any params

wary harness
#

how would I make method to wait fro another method to finish loading player balance

wary harness
#

thing is galistener is trying to run command and add amount to player balance

#

and balance is not loaded yet

stone sinew
#

"GAListener" the voting thing right? Why not just add a delay to the command?

wary harness
#

to my plugin users xd

#

they just want it to work

#

and balance is loaded from mysql

#

so it takes sometime

#

and galistener is running command

#

on join xd

stone sinew
#

Well I haven't used voting listeners in a few years but I always added a 5 second delay to the commands ran by it.

valid crag
#

the balance plugin is trash then

#

the player isn't supposed to be let in until their data is properly retrieved and loaded

muted idol
#

hey there im getting a ClassNotFoundException on this line private mainMenuGUI mainMenuGUI = new mainMenuGUI();
in this class

public class OpenGUI implements CommandExecutor {
    private mainMenuGUI mainMenuGUI = new mainMenuGUI();

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        Player p = (Player) sender;
        if (p.hasPermission("EUNetwork.parkour.openGUI") || p.isOp()) {
            if (command.getName().equalsIgnoreCase("parkour-gui")) {
                mainMenuGUI.getCounter();
                mainMenuGUI.OpenMainMenuInventory(p);
            }
        }
        return true;
    }
}
#

i have no idea why im getting this error

valid crag
#

probably a static initializer failing somewhere

valid crag
#

something is doing something that tries to load a class

#

which runs the static code of that class

#

which fails

#

and so the class can't be initialized

#

throwing a class not found

#

also

#

don't cast sender to player blindly

#

and get rid of the isOp check

#

make the permission default true for ops if you want ops to have perms to the command by default

muted idol
#

alright

quaint mantle
#

is there an enderman place block event

#

because idk how to disable that

#

without turning off mob griefing

#

AKA disabling villager breeding, and other stuff

#

😭

#

?

#

thank you

#

idk why i didnt google that

#

or search rather*

#

i looked for "EndermanBlockPlaceEvent"

valid crag
#

too specific to be a bukkit event

#

bukkit events must be vaguely named and difficult to guess at what they actually represent

quaint mantle
valid crag
#

imajin

quaint mantle
#

if my plugin, recoded works 1st try you owe me 5 dollars

valid crag
#

i may consider sending an ok_hand emoticon

quaint mantle
#

i am grateful for the consideration

valid crag
#

what is the plugin supposed to do

quaint mantle
#

shop plugin

valid crag
#

because that's never been done before

quaint mantle
#

right

valid crag
#

what kind of shop plugin

quaint mantle
#

GUI shop

valid crag
#

well

#

alright

#

i don't really have anything interesting to say about that

quaint mantle
#

surprised you arent shitting on me

valid crag
#

too busy doing something else

#

link the codebase and I'll shit on it later

quaint mantle
#

it didnt work

valid crag
#

make me a crates plugin

quaint mantle
#

no

valid crag
#

it needs to be not shit

quaint mantle
#

arent you like the best programmer here

valid crag
#

maybe

#

but i have many projects i'm working on

#

i don't feel like working on something as gay and uninspired as a crates plugin

quaint mantle
#

ok so now that we osrted that

#

idk what to really do for this

#

so i have a custom shitty Holograms method, right? it works its done its whatever

#

but idk why i cant remove them

valid crag
#

you know

quaint mantle
#

i loop entities on "ServerLoadEvent"

valid crag
#

i really fucking hate optionals

quaint mantle
#

ok

#

thats not what i

valid crag
#

they're so redundant and dumb

quaint mantle
#

can u not

#

like

valid crag
#

literally just nullable variables with extra steps

quaint mantle
#

sometimes they're useful

#

type over issues with unnecessary conversation

#

bro

#

keep typing

#

ok

#

so

valid crag
#

the only use case is like chaining lambda conditionals or something

quaint mantle
#

idk why that isnt working

#

like

#

the armour stands

#

all pass conditions

valid crag
#

for everything else it's literally a nullable variable

quaint mantle
#

but i cant

#

like

#

the loop doesnt run

#

at alll

valid crag
#

and people make the fucking argument that they avoid npe's

quaint mantle
#

or it does and they somehow fail the conds?

valid crag
#

well gee now I have no such element exceptions

#

or whatever empty optionals throw

#

"you'll probably forget to nullcheck"

#

yeah you're probably going to forget to check isPresent

quaint mantle
#

ok

#

so

#

why is the code im running not working

#

idk WHY

valid crag
#

such absolute bullshit

quaint mantle
#
var nullable = Optional.ofNullable(otherNullable).orElse(defaultValue)

// var nullable = otherNullable;

// nullable = nullable == null ? defaultValue : nullable;

// if (nullable == null) nullable = defaultValue;

@valid crag

#

its cleaner imo

#

ok

#

so

#

can you help me pls

#

yeah be patient

#

because idk why its not workin

quaint mantle
#

oh does he have an actual issue

quaint mantle
#

the original for(getworlds whatever)

#

is being called

#

the code in that loop is also being ran, as my gamerules are being set

valid crag
#

yeah the chaining with the conditionals and ifPresent and whatever are the only real use cases

#

they're situationally nice

sullen marlin
#

Optionals are stupid

valid crag
#

but like, use kotlin

quaint mantle
valid crag
#

lmao the orange cube agrees with me for once

quaint mantle
#

i've also tried getEntities()

#

i'll try getEntities again

#

but that was my 2nd try for that

valid crag
#

pretty sure armorstand is a living entity

#

they apparently also drown if left underwater

quaint mantle
#

yeah

#

idk tbh

#

i'll try getEntities() again

#

but as far as i know that doesnt work either

#

yeah that didnt work

#

is the custom name visible?

#

yep

valid crag
#

there is one case where I did use an optional

#

a nullable optional

#

the value could either be present, an empty optional, or null

quaint mantle
#

infact heres the hologram code, i know its shitty but it does work fairly well

#

mcMsgFrom just translate colour codes and some HEX stuff

valid crag
#

use holographic displays api or something

#

why reinvent the wheel

quaint mantle
#

i agree

#

more reliable

#

im not sure if minecraft defaults to \n but use System.lineSeperator

valid crag
#

hd does it through the protocol layer so it's less fragile

quaint mantle
#

HolographicDisplays also is just.. annoying tbh

#

i want stuff to be customizable, and easy to edit/use

#

i dont want a ton of extra commands and files for something i dont actually need

valid crag
#

noo i have to include an extra jar in the runtime

#

one that the environment would probably have anyway

#

the horror

#

i'm sure you can find a decent library you could shade in instead of depending on hd

quaint mantle
#

i might just make a getHolograms() List

valid crag
#

you should definitely track your holograms yes and probably abstract them away from being armorstands

quaint mantle
#

worst comes to worst i could just enable their marker

#

idek what the Marker does

#

yeah

#

just a smaller hitbox?

#

so

somber hull
#

May be a dumb question

#

But i can only use the paper API if the plugin is run on a paper server correct?

somber hull
#

Ok, but if i use the paper api in my plugin and run it on a spigot server it breaks everything?

quaint mantle
#

it might?

#

idk i havent tried it

somber hull
#

It makes sense that it would

#

Imma try it

#

Cause the paper api is just a replacement for spigot they say its better

quaint mantle
#

it is better

somber hull
#

whats better about it? only thing i know is that theres a onJump event

valid crag
#

if you use paper specific parts of the paper api, the implementations of those parts do not exist on spigot servers

quaint mantle
#

it has a lot more features for stuff, its fast

valid crag
#

and thus the plugin will explode

quaint mantle
#

it has a little bit better server-related stuff

somber hull
valid crag
#

it's better and more comprehensive in almost every way and there is little reason beyond maintaining spigot compat to not use it over spigot

#

of course it's still based on bukkit so it isn't just dancing on roses either

somber hull
#

So should i use spigot or paper

valid crag
#

depends

somber hull
#

Idk how bungeecord works

#

Is that running on paper or spigot?

valid crag
#

neither

#

bungee is bungee

somber hull
#

🙃

#

im not confused at all now

valid crag
#

bungee isn't a server

#

it's a proxy

somber hull
#

Oh

torn shuttle
#

hm if I get a shallow copy of a livingentity location and it then gets removed, does the location become null or does it keep the last known location in storage?

valid crag
#

wut

torn shuttle
#

location = livingEntity.getLocation();
livingEntity.remove();

30 minutes later

location == null ?

valid crag
#

learn java

torn shuttle
#

this isn't a java issue

somber hull
#

well

#

since your removing the entity

#

the location is nulled

valid crag
#

no

somber hull
#

you need to clone the location right?

valid crag
#

that is not how cloning works

#

nor is that how nulling things works

torn shuttle
#

the location might get nulled depending on how locations were implemented

valid crag
#

you do not null a Location

#

you do not null an object

#

you null a reference

#

you null a field

#

you null a variable

torn shuttle
#

yeah I called that field location, that's why we're saying location

valid crag
#

what you are asking is whether the contents of your "location" variable are assigned to null

#

which, how could it be?

#

what would set it to null?

torn shuttle
#

removing the entity

valid crag
#

the entity doesn't know about your variable

torn shuttle
#

that is the question

valid crag
#

the server doesn't know about your variable

#

only your code knows about your variable

#

how could they null it?'

torn shuttle
#

location is a shallow copy of the entity's field

#

unless you clone it

#

so they all do know about it

somber hull
#

@torn shuttle try sending a message with the location.getX() before and after removing it

valid crag
#

hhhhhh

#

location is a variable

somber hull
#

if they both error then it has nothing to do with removing the entity

torn shuttle
#

batman you should really learn java ya know

valid crag
#

the entity knows about the object

#

the underlying Location object referenced by your location variable

#

it does not know about your variable

#

the location variable is something that only the class that declares it knows about

#

unless something comes and sets it to null, it won't be set to null

torn shuttle
valid crag
#

furthermore

#

there is nothing shallow or deep about locations

torn shuttle
#

it's just I can't really test it right now because I'm in the middle of a big rewrite

valid crag
#

a location is 3 doubles

#

and a world

#

which is an identity element and cannot be cloned

#

you cannot clone it deeply, you cannot clone it shallowly

#

you can only clone it

torn shuttle
#

locations can be cloned, what are you on about

valid crag
#

yes, my point is that the distinction of "shallow" which you're going on about doesn't exist for locations

torn shuttle
#

I said shallow copy not shallow clone

valid crag
#

that is the same thing

torn shuttle
#

no, a shallow copy specifically wouldn't be a clone

#

I'm just creating my own field that links to the entity's field

valid crag
#

no

#

you are creating a field that points at an object

torn shuttle
#

a deep copy would have to be a clone of the location

valid crag
#

the entity's field is 100% irrelevant

#

you aren't pointing at the field

#

you are pointing at the object

#

get it through your skull

torn shuttle
#

the object that is in the field

valid crag
#

yes

#

but that has nothing to do with your field

torn shuttle
#

this is genuinely just semantics

valid crag
#

what happens with the entity's field is none of your business

#

it won't have an effect on anything in your code

torn shuttle
#

I think you're just mad because you made a fool out of yourself a few minutes ago

valid crag
#

are you genuinely daft or are you pulling my strings

quaint mantle
#

🥱 just get along

torn shuttle
valid crag
#

Objects do not get nulled

#

Variables get nulled

#

The distinction is key to understanding why your question is stupid

torn shuttle
#

so you're saying the field might get reassigned to null but the location object won't

valid crag
#

the field will be reassigned to null if something reassigns it to null

torn shuttle
#

I guess that might be worse depending on how mc handles entity teleportation

#

hm

valid crag
#

let me reiterate

#

you are not pointing at the field on the entity

#

you are taking the object from the entity's field

#

and then you are referencing that object in your own field

#

no matter what happens to that other field, or any other field in the world, your own field will still hold that reference

torn shuttle
#

I understand what you mean, now i am just wondering if entity teleportation might create a new location object under specific conditions which would mess me up

valid crag
#

it will hold that reference until you tell it to stop holding that reference

torn shuttle
#

specifically things like going through portals

valid crag
#

the location object retrieved from the entity is always a clone

torn shuttle
#

you seem to have a definition of clone that is not compatible with the cloneable interface's nomenclature

valid crag
#

Location::clone gives a clone of the location

torn shuttle
#

yeah

valid crag
#

which is what you are getting

#

a clone

torn shuttle
#

sure, except I'm not cloning the object

valid crag
#

then you're getting a clone of a clone

#

which is still a fucking clone

torn shuttle
#

am I not pointing to the same object lol

valid crag
#

that is what cloning means yes

#

you are creating a new object with the same contents

#

or more technically, the same state

quaint mantle
#

what are some cool things I can do with the event handler

quaint mantle
#

thanks but really though

#

I made a player join and leave message but that was the only thing I could think of

torn shuttle
# valid crag that is what cloning means yes

you see how it gets confusing when you have a definition of cloning that just points to one object and then another different but equally named definition of cloning that takes an object and does a deep copy right

valid crag
#

well, like I explained, the distinction between deep and shallow does not exist for Location

torn shuttle
#

this is why the clone wars sucked

valid crag
#

so whether the copy or clone or whatever you want to call it is deep or shallow or anything in between doesn't matter

#

what matters is that the clone operation takes an object

#

and produces a new, identical object

#

it has the exact same values

#

but it is not the same object

#

changes made to the original will not be reflected in the clone

#

and vice versa

#

cloning never "points to one object"

#

cloning always creates a new object, a copy, of the original

#

copy and clone are effectively interchangeable

torn shuttle
#

are you claiming that getting a location and getting a location and cloning it are exactly the same thing ?

valid crag
#

are you getting the location from an entity?

torn shuttle
#

yes

valid crag
#

Locations are mutable

torn shuttle
#

right

#

so it's not the same thing

valid crag
#

you never want to pass mutable objects out of getters

#

because then the person who received that object can mutate it

#

and only you should be allowed to mutate your objects

#

for this reason, all bukkit entities return a clone, a copy, of their location

#

instead of the location itself

#

otherwise, if you did entity.getLocation().add(100,100,100)

#

the next person calling getLocation would get the location moved by 100s

#

this is also why you shouldn't return collections or maps or whatever directly in your getters

#

the moment you expose something mutable to the world, you lose all control of what happens to it

#

that mutable map gets passed around like a whore and suddenly your supposedly "private" map is full of aids and STDs

torn shuttle
#

I was nearly absolutely certain that the getLocation object passed was mutable

valid crag
#

it isn't; very few things returned by anything are mutable

torn shuttle
#

my life is a lie

valid crag
#

or, rather, yes, it is

#

it is mutable, but it is a clone

torn shuttle
#

aha

#

so it is mutable

valid crag
#

you can modify it, but doing that won't touch the original

#

which is what we care about

torn shuttle
#

I fucking knew it

#

man you are actually gaslighting me into having an existential crisis

valid crag
#

we don't want the original to be modified by you and be infected by your noob aids

#

so in conclusion

#

the Location you're getting is a clone

#

so you cloning it makes no difference

#

because it's already a clone

quaint mantle
#

toxic masculinity in a nutshell

torn shuttle
#

except it makes a difference because one is mutable and the other one isn't

valid crag
#

they are both mutable

#

every single Location under the sky is mutable

torn shuttle
#

if you clone a location it is only mutable insofar as you personally modify it

valid crag
#

that isn't what mutable means

#

mutable means something whose state can be changed

torn shuttle
#

I mean

valid crag
#

none of the fields of Location are final

#

hence Location is mutable; able to be mutated

#

and no your google definition doesn't apply

#

i'm talking about the programming term

#

the literal of which would probably be "mutatable" or "modifiable" or whatever

torn shuttle
#

the point is that one is in sync (hopefully) with the actual location and the other one is a snapshot of when you cloned it

valid crag
#

anyway, the object you're getting is already a clone

#

there is no point in cloning it a second time

#

no more than there is any point in cloning it a third time

#

or a fourth

torn shuttle
#

unless you want a snapshot of where it was a specific point... or want to do operations based on locations....

valid crag
#

yes, well, obviously

#

but what you said makes it sound like you're doing getLocation().clone()

torn shuttle
#

which I do when I need to be certain it's a very specific location

#

at a specific time

valid crag
#

getLocation already returns a fucking clone

#

how many times must I tell you this

torn shuttle
#

getLocation moves around over time even if you don't touch it

valid crag
#

yes... but that doesn't mean that the returned Location does

#

getLocation() returns different values over time because the entity's underlying Location object is modified/changed

#

since the returned Location is a clone, those modifications/changes will not apply to the clone

torn shuttle
#

are you saying that every time you do getLocation you get a different instance of the object in the location field

valid crag
#

just as you cannot modify the underlying location, neither can it modify yours

#

yes, that is what clone means

#

like I've been trying to explain for like 20 minutes now

#

you get a new object with the same initial values

#

you get a Location that has the same values but is not the same object

torn shuttle
#

I'm going to have to test it because up until now I was pretty certain it was returning one object no matter when you queried it

valid crag
#
    @Override
    public Location getLocation() {
        return new Location(getWorld(), entity.locX(), entity.locY(), entity.locZ(), entity.getBukkitYaw(), entity.pitch);
    }
#

this is the implementation of getLocation for CraftEntity

torn shuttle
#

I guess that settles it then

valid crag
#

we're far from settled

#

I recall explaining to you why precisely it must be this way

torn shuttle
#

I was lied to in like 2017 lol

valid crag
#

why it would be specifically strange if it didn't do this

quaint mantle
#

batman never wrong

valid crag
#

do you remember when I said Location is mutable

torn shuttle
#

I know the issues it being mutable can cause, I've dealt with them several times when running operations on locations

valid crag
#

so you should know that it would be very strange for bukkit to return the actual original location

#

as any changed made to it would be reflected on the entity itself

#

without any possibility of control on the entity's part

torn shuttle
#

yeah, I thought it was strange years back but I went with the answer provided back then

valid crag
#

right

torn shuttle
#

and never really thought to look it up

valid crag
#

next, to dismantle the nullable objects issue

#

i don't know what possessed you to think of things that way but that is not how anything works

#

objects don't just turn null at random for no reason

#

objects don't turn null at all

torn shuttle
#

you know how worlds can be null in locations? I thought it might be possible to make the entire thing null

valid crag
#

null means the absence of an object

#

an object cannot become an absence of an object

torn shuttle
#

would've required every field to support it though which they don't

valid crag
#

it isn't a state of being that an object supports

#

even if you null every part of an object, the object itself still exists

#

you can null the contents of an object; its fields

#

but the object itself still exists, and is not, and can not, be null

#

i'm going to go get some donuts

#

the utter and complete disappointment is too bitter without any sweets

summer scroll
#

Someone know why the head rotation using packet doesn't work when I use 1.16.5 and it works on 1.17.1, it has the same method. Basically I want to make the armor stand head, rotate the same as player head rotation (yaw).

quaint mantle
#

I have a question I made a /spawn command but I changed the command name to /hub in the plugin.yml but it is still commandtps:tps

#

and my player join message is also not sending anymore, it was sending yesterday but since I restarted the server it is not

#

@quaint mantle code?

#

wait I fixed it nvm

#

but thanks for trying to help

shadow gazelle
#

Anyone know how I could put all NPC config numbers retrieved with this in a list or something so I can check them against the args the user gave and tell them if it's an available NPC or not? It might just be because it's 9:30, but I can't think of how I would. I tried and a ArrayList a few mins ago and it either wouldn't work, or I did it wrong.

file.getConfigurationSection("data").getKeys(false).forEach(npc -> {});
summer scroll
#

1.17

    @Override
    public void setHeadRotation(Player player, float yaw) {
        if(!armorStandMap.containsKey(player)) return;

        NMSBackpack backpack = armorStandMap.get(player);
        sendPacket(new PacketPlayOutEntityHeadRotation(backpack.getArmorStand(), ((byte) yaw)), null);
    }
stone sinew
shadow gazelle
#

How are you sending a packet without getting the connection?

summer scroll
shadow gazelle
#

Point still stands

summer scroll
#
    private void sendPacket(Packet packet, Player player){
        if(player == null){
            Bukkit.getOnlinePlayers().forEach(online -> ((CraftPlayer) online).getHandle().b.sendPacket(packet));
            return;
        }
        ((CraftPlayer) player).getHandle().b.sendPacket(packet);
    }
shadow gazelle
#

Oh, I'm stupid

stone sinew
summer scroll
stone sinew
quaint mantle
#

it's not required

#

sendPacket(new PacketPlayOutEntityHeadRotation(npc, (byte) yaw));

shadow gazelle
summer scroll
#

i have 2 sendpacket method basically

shadow gazelle
#

So you can't use it in 1.16

summer scroll
#

i know

quaint mantle
summer scroll
#

i have 2 send packet method for 1.17, and 1.16

shadow gazelle
#

What's your 1.16 method?

summer scroll
#

just change b to playerConnection

stone sinew
summer scroll
#

doesn't follow the player head like what does it 1.17

stone sinew
summer scroll
stone sinew
#

can you pastebin the full code? Off those methods it should function correctly. As long as on 1.16 you're using the right field names.

summer scroll
stone sinew
#

Hmmm... Yeah just based off those classes it should display the head rotation properly.
Is it possible to send a video of the difference (Whats occurring on 1.16 then 1.17)?

summer scroll
waxen locust
#

sorry for butting in, but is there a way to remove a score from a scoreboard or change a score's Entry name? i cant seem to find one and the other option would be to create a new objective every time and delete the old one, which seems unideal

quaint mantle
#

and are you talking about making a nonflickering scoreboard?

stone sinew
waxen locust
quaint mantle
#

so you create the scoreboard for the player once on login
then create teams for each entry you want to be updated (non-updated entries can be scores)
set the team prefix to the desired initial text
then on update you get the players scoreboard
then get the team and setPrefix()

waxen locust
#

ok i kind of get it

quaint mantle
#

ill write out a code example for you

#

one sec

waxen locust
#

ok tysm

waxen locust
quaint mantle
#

wdym

waxen locust
#

lemme find it

#

the one returned by getMainScoreboard() thats shown by default to everyone

quaint mantle
#

do you already have a scoreboard shown when on the server?

waxen locust
#

no

#

i dont think so

exotic scroll
#

Can anyone explain bukkit runnabel to me?

quaint mantle
exotic scroll
#

How to make a runnable that switches a boolean var on and off

summer scroll
#

@stone sinew

high pewter
#

I'm a bit confused between the differences between different player connection events in BungeeCord- PlayerHandshakeEvent, LoginEvent and ClientConnectEvent. When should I use which one?

quaint mantle
exotic scroll
#

do I have to declare a plugin object?

#

@quaint mantle

quaint mantle
#

its your main class that extends JavaPlugin

quaint mantle
exotic scroll
#

oh ok

high pewter
exotic scroll
#

ty all

waxen locust
quaint mantle
stone sinew
#

Try debugging the yaw you're setting and the yaw after the packet is sent

quaint mantle
#

hi

#

How do I all get the sounds in an arraylist?

#

Sound#values no working foreach

quaint mantle
quaint mantle
exotic scroll
#

How to detect when someone pressed the wasd key?

#

what event is it?

quaint mantle
quaint mantle
quaint mantle
#

making a list of all the manual sounds would be horrible.

#
for(Sound sound : Sound.values()) {
  String soundName = sound.name();
}```
#

@quaint mantle ^

#

oh

#

thanks

#

return Arrays.asList(Sound.values());

exotic scroll
quaint mantle
#

make sure to cache it

woeful moon
#

Do plugins built with jdk 8 work with servers running java 16?

exotic scroll
#

?

#

why not?

quaint mantle
quaint mantle
#

oh I guess i learned something today

#

my bad

woeful moon
#

Ok 👍 thanks guys

exotic scroll
#

: )

quaint mantle
# exotic scroll Yes I believe so
@EventHandler
public void onPlayerMove(PlayerMoveEvent e) {
    if (!this.playerMoved(e.getTo(), e.getFrom()) {
        return;
    }

    // Your code here
}
exotic scroll
#

Oh ok

quaint mantle
#

you can do that by comparing the values

exotic scroll
#

alr

#

Imma do some thinking

quaint mantle
#

but what if a player is looking east as opposed to west?

exotic scroll
quaint mantle
#

x changes instead of z

#

use their vector rotation

exotic scroll
#

vector 3?

#

docs?

quaint mantle
#

i do too much game dev

#

its just vector

#

lmao

quaint mantle
exotic scroll
#

alr tyu

shadow gazelle
# summer scroll 1.17

Ignoring that this has nothing to do with helping you, that's cool, is it a custom resourcepack?

quaint mantle
#

looks like it uses an armorstand

#

it is

shadow gazelle
quaint mantle
#

ice

#

lemonade my neck is drippin

#

i'm just gonna log off for the night 😢

summer scroll
#

So you put the item stack with custom model data in armor stand helmet and make the armor stand rides you.

shadow gazelle
#

Yeah, I saw the armor stand part before, was just wondering if it was with a resourcepack

exotic scroll
#

what happens if I print it?

quaint mantle
#

its just a location

exotic scroll
#

hmmm

exotic scroll
#

oh so it is coords

#

ty

hardy swan
#

burning question here

#

what is the purpose of this protected abstract class constructor, who even calls it

protected JavaPlugin(@NotNull final JavaPluginLoader loader, @NotNull final PluginDescriptionFile description, @NotNull final File dataFolder, @NotNull final File file)
summer scroll
quaint mantle
#

How to check args is a sound?

worldly ingot
#

If not it, then the parent loader

hardy swan
#

yea that I know, but the implementing class do not normally use this constructor, isn't it?

worldly ingot
#

No

hardy swan
#

then wouldn't the public abstract constructor without args always be called instead of this?

quaint mantle
#

Im about to punch a baby

#

does extending an itemstack remove ALL of its equals functionality?

hardy swan
#

who asked that lol

quaint mantle
#

me

#

🤨

hardy swan
#

oh, no

quaint mantle
#

does putting it in a map destroy it's equals functionality?

hardy swan
#

destroy?

#

map uses equals

#

how can map function if equals is destroyed? or idk what you mean

quaint mantle
#

anyone know how to fix intellij freezing?

#

How to check args is a sound?

#

I tried using trycatch but it keeps giving the error on the console.

hardy swan
#

catch IAE

quaint mantle
#

try {
Sound sound = Sound.valueOf(string);
} catch (IllegalArgumentException e) {

}

#

I make a function for check is a sound

#

i try IllegalArgumentException

#

and NullPointerException

hardy swan
hasty prawn
#

The error is being thrown in the args1 method.

#

Line 48 in soundCommand

hardy swan
#

it doesn't matter, he should have caught the exception nonetheless

hasty prawn
#

isSound and args1 are not the same method

hardy swan
#

ah oops im blind

quaint mantle
#

I apologize for the stupidity.

#

and thanks for the help

hardy swan
#

dont name you method arg1 pls

hasty prawn
#

^

#

I had to make sure I was reading the ST right

hardy swan
#

I couldn't even tell it was a method at first glance XD

quaint mantle
#

i knew it

#

extending an itemstack breaks functionality through #equals

#

even when cloned

hardy swan
#

watchu mean by break functionality

quaint mantle
#

No work anymore

#

It work

#

Now it dont

hardy swan
#

says A extends ItemStack

quaint mantle
#

jfc

#

i dont care

#

just stop

#

even when cloned

#

just stop, its condescending

hasty prawn
#

😂

hardy swan
#

but you can override the superclass equals method

quaint mantle
#

this man

hardy swan
#

it is not "destroyed" XD

quaint mantle
#

i didnt ask for your help

hardy swan
#

;-;

hasty prawn
#

:(

hardy swan
#

wait a minute

summer scroll
#

By using List#add(index, something) method, will it replace the item with that index or adding it?

hardy swan
#

add

quaint mantle
#

add(int index, E element): inserts the element at the given index. The elements from the given index is shifted towards right of the list. The method throws IndexOutOfBoundsException if the given index is out of range.

summer scroll
#

yup, definitely should read that

#

thanks

quaint mantle
#

so if you had [A, E, U] and do vowels.add(0, "I") itll be [I, A, E, U]

#

When I try to spawn a player it returns this error.

quaint mantle
#

However I did a try catch to return null

#

When I type random letters, it returns the correct message.

high pewter
#

Is there a better way to do something every hour on the hour in Bungeecord? Something's telling me this method is probably bad and I don't know why```java
public void startHourLoop() {
LocalDateTime now = LocalDateTime.now();
plugin.getProxy().getScheduler().schedule(plugin, this::everyHour,
Duration.between(now,now.plusHours(1).truncatedTo(ChronoUnit.HOURS)).getSeconds(), TimeUnit.SECONDS);
}

public void everyHour() {
System.out.println("It is now on the hour");
plugin.getProxy().getScheduler().schedule(plugin, this::everyHour, 1, TimeUnit.HOURS);
}```

quaint mantle
#

I'm not creating an npc system

#

It's just a simple spawn mobs command

#

However, when the PLAYER option appears, it gives an error.

quaint mantle
quaint mantle
#
if(input.equalsIgnoreCase(EntityType.PLAYER.name())){
  //say no
}```
quaint mantle
# quaint mantle
boolean isEntity(String string) {
    try {
        return EntityType.valueOf(string.toUpperCase(Locale.ROOT)) != EntityType.PLAYER;
    } catch (IllegalArgumentException | NullPointerException e) {
        return false;
    }
}

🥄

#

or that

high pewter
quaint mantle
#

I wanted to make a list of entities that give an error to return null.

summer scroll
#

Isn't Enum#valueOf annotated as Nullable?

#

or it will throws IllegalArgumentException instead if the enum is invalid.

quaint mantle
torn shuttle
#

boys, only 93 compile time errors left on my big rewrite

#

I'm throwing a party once it's done

hardy pivot
#

Hello good evening.
I have a problem with a Bukkit Runnable I hope you can help me.

The thing is, I'm using a multiplayer Bukki Runnable. all using hashmaps, but what I don't know is how to make the hashmaps (player) arguments individual for each player. because currently I give the value to the variable Player player; from the constructor and the player I use it in the run (), the problem is that it interferes with the other tasks of the players. thank you I hope you have given me to understand and can help me. I attach a bit of the code:

private final Player player;
    public TaskAR(Bar bar, Player player, AR plugin){
        this.bar = bar;
        this.player = player;
        this.playerHash.put(player, player);
        timeRelog = plugin.getConfig().getInt("Anti-relog.Time");
        this.progressHash.put(player, 1.0);
        this.timeHash.put(player, 1.0 /(30 * 20));
    }
#
@Override
    public void run() {
        //player.sendMessage("tas loco tio");
        if (player != null) {     bar.getplayerBossBar().get(player).setProgress(getProgressHash().get(player));
            bar.getplayerBossBar().get(player).setTitle(Bar.format("&6Anti-Relog (" + Math.round((getProgressHash().get(player) - getTimeHash().get(player)) * 30) + ")"));
            getProgressHash().put(player, getProgressHash().get(player) - getTimeHash().get(player));
            if (getProgressHash().get(player) <= 0) {
                bar.getplayerBossBar().get(player).removePlayer(player);
                bar.getplayerBossBar().get(player).setVisible(false);
                bar.getHashPlayers().put(player, false);
                this.cancel();
                bar.getPlayerTask().remove(player);
                bar.sendedMsg.put(player, false);
            }
            if (player.isDead()) {
                bar.getplayerBossBar().get(player).removePlayer(player);
                bar.getplayerBossBar().get(player).setVisible(false);
                bar.getHashPlayers().put(player, false);
                this.cancel();
                bar.getPlayerTask().remove(player);
                bar.sendedMsg.put(player, false);
            }
        }
    }
torn shuttle
#

is your issue that every player is getting the same bar?

hardy pivot
#

nop i cover that with the getPlayerBossBar that return a bossbar hashmap

#

he problem is that that class i called by 2 players at the same time

#

and the variable player interferes

#

that all the code in run uses player

#

i was thinkink to do a foreach but idk if i works

#

stacking all the players who call the class in a hashmap and then in run do the foreach of the hashmap players

quaint mantle
torn shuttle
#

this is genuinely hard to read

quaint mantle
#

I thought about that

torn shuttle
hardy pivot
#

The problem is that the player variable cannot store more than 2 players so it interferes with the entire run () method.

#

run() its ok but i need to execute run() for 2 players in the same time

torn shuttle
#

ok so yeah you want to either have one run() per player or have run() go through every player

hardy pivot
#

Let the method run for any player regardless of whether other players are already running it

torn shuttle
hardy pivot
#

ty :3

random ledge
#

I've used an armorstand marker to make the armorstand hitbox smaller, but the name of the armorstand has gone down. Instead, has anyone ever solved this problem, can you help me?
---> picture: https://www.img.in.th/image/OJW5xw

torn shuttle
torn shuttle
#

also I thought armorstands with marker tags specifically couldn't be hit at all

random ledge
torn shuttle
#

that is your problem

hardy pivot
#

with a:

  TaskAR task = new TaskAR(this, player, plugin);
  public class TaskAR extends BukkitRunnable {
  @Override
    run()
  }
torn shuttle
#

and also I guess it might be important to say how you're creating your bossbar

quaint mantle
#

how do i check if a player is sleeping

#

my current code isnt running

#

oh

#

well that isnt all the code

#

but its just the standard PlayerEnterBedEvent

hardy pivot
#
                        if (getConfig().getBoolean("Anti-relog.Defender-Timer")) {
                        bar.castPlayer((Player) e.getEntity());
                    }
                    if (getConfig().getBoolean("Anti-relog.Attack-Timer")) {
                        bar.castPlayer((Player) e.getDamager());
                    }
#
  public void castPlayer(Player player){

        if (sendedMsg.get(player) == null || !sendedMsg.get(player)){
            List<String> castMessage = plugin.getConfig().getStringList("Anti-relog.Anti-Relog-Message");
            for(String messages : castMessage) {
                player.sendMessage(ChatColor.translateAlternateColorCodes('&', messages));
            }
            sendedMsg.put(player, true);
        }

        getHashPlayers().put(player, false);
        if (getHashPlayers().get(player)){
            getPlayerTask().get(player).cancel();
            getHashPlayers().put(player, false);
            getPlayerTask().remove(player);
        }
        getplayerBossBar().get(player).addPlayer(player);
        getplayerBossBar().get(player).setVisible(true);
        getHashPlayers().put(player, true);

        TaskAR task = new TaskAR(this, player, plugin);
        getPlayerTask().put(player, task);
        getPlayerTask().get(player).runTaskTimer(plugin, 0, 0);
    }

This is the method castplayer

torn shuttle
hardy pivot
#

nop

#

all the objects are storage in hashmaps

hardy pivot
#

that i put there

torn shuttle
#

where are you creating the bar

hardy pivot
#
    HashMap<Player, Boolean> castedPlayers = new HashMap<>();
    HashMap<Player, BossBar> playerBossBar = new HashMap<>();
    HashMap<Player, TaskAR > playerTask = new HashMap<>();
    HashMap<Player, Boolean > sendedMsg = new HashMap<>();

these are the hashmaps

#

on playerJoin

#
      @EventHandler
    public void onJoin (PlayerJoinEvent e){
        if (getConfig().getBoolean("Anti-relog.Enable")) {
            Player player = e.getPlayer();
            if (!bar.getplayerBossBar().containsKey(player)) {
                bar.createBar(player);
            }
        }
    }
#
   public void createBar(Player player){
        BossBar bossBar = Bukkit.createBossBar(format("&6Anti-Relog"), BarColor.RED, BarStyle.SOLID);
        getplayerBossBar().put(player, bossBar);
    }
rugged topaz
#
if ((float) farmingXP / xpRequiredToNextLvl(farmingXP) < 0.05) {
                fillFarming = "&f--------------------";
            }
            if ((float) farmingXP / xpRequiredToNextLvl(farmingXP) >= 0.05) {
                fillFarming = "&2-&f-------------------";
            }
            if ((float) farmingXP / xpRequiredToNextLvl(farmingXP) >= 0.1) {
                fillFarming = "&2--&f------------------";
            }

is anyone able to help me convert this into a function that deals with a StringBuilder as i cant get my mind across how to do that, rather than occupy 250+ lines of code with this nonsense

torn shuttle
hardy pivot
#

The program creates a bar for each player, that is activated when he hits or receives hits, the problem is that as the task is global and is called by constructor, it interferes with the other tasks

torn shuttle
hardy pivot
#

when the player hits again the same player, the time of the progressbar is not reset because the player variable contains another player

torn shuttle
#

oh

#

so this shows up when a player hits another player?

hardy pivot
#

the progressbar shown is reset but the time of the task continue and cancel he task with he first hit

torn shuttle
#

yeah you might have a structure issue here

hardy pivot
#

yeah its complex because its a lot of code

#

xD

#

and classes

torn shuttle
#

it's not that complex but the way you structured it is starting to sound like it's not going to work

hardy pivot
#

its work with only 1 type of player

#

i mean

hardy pivot
#

probably i have to do the same structure to the other player

#

but i want to this work with only 1 method

torn shuttle
#

who is the person who gets the bar, the person hitting or the person getting hit?

hardy pivot
#

e.getEntity() is the player that recives the hit
and e.getDamager() is the player that do the hit

hardy pivot
#

the 2 with the same event and same methods

torn shuttle
#

ok so this entire thing should only take 1 hashmap to make

#
class CombatTag{
int timeRemaining;
Player player;
BossBar bossBar;
CombatTag(Player player){
boolean isDisplaying = false;
this.player = player
ListenerClass.players.put(player, this);
}
public startDisplay(){
isDisplaying = true;
//start a repeating task here that will repeat showing the tag until the time remaining == 0 , once it is make isDisplaying = false;
}
}

class ListenerClass implements Listener{
HashMap<Player, CombatTag> players = new HashMap<>();
@EventHandler
public void whatevr(damageevent damageevent){
CombatTag combatTag = players.get(damageevent.getplayer());
if (combatTag == null){
combatTag = new CombatTag(player);
combatTag.timeRemaining = X;
}
}
}

#

obviously it's pseudocode

#

and there's a better way to do the listener but I can't be bothered to use the hashmap specific mehtods for pseudocode

#

@hardy pivot ^

#

oh yeah and make sure to use the boolean to make it start the display again if it is set to false

hardy pivot
#

Thank you so much

#

ill try to do it

#

Looks good!

torn shuttle
#

de nada

hardy pivot
#

How u know my language?

#

xD

torn shuttle
#

I'm a professional hacker

#

and also

hardy pivot
#

xDDDDDDD

#

10/10 good service

torn shuttle
#

don't forget to tip your staff

hardy pivot
#

JAJJA

hardy pivot
#

@torn shuttle Hey

hardy pivot
#

the problem was this

#

Always giving false xD. what a headache

#

the whole program its ok

#

btw thanks for your helping and he patience

#

my me from another night did that and did not remember

#

yeah

oblique pike
#

Is there any list of minecraft particles with their values from spigot API, or i need to make one myself?

indigo crypt
#

hey bro, how to clear dead named entity log

oblique pike
#

Unname entity on its death

indigo crypt
#

like this, how to clear it

indigo crypt
oblique pike
#

I know that it works, i use this in my own plugin

indigo crypt
#

okay, i will try it

quaint mantle
indigo crypt
#

wait, how to unname named entity, name it ""?

oblique pike
#

or null

indigo crypt
indigo crypt
oblique pike
#

now

quaint mantle
#

terrible support group

#

idk why i wouldnt hate it lol

indigo crypt
#

XD

oblique pike
oblique pike
#

XD

quaint mantle
#

rAtelImIt

#

just use Pterodactyl

#

or your own panel tbh

oblique pike
#

...Im just using ssh

quaint mantle
#

idek what ssh is

#

im a noob

quasi flint
#

ssh is for pros

quaint mantle
#

i dont even think my host allows that

#

or uses it

indigo crypt
indigo crypt
quaint mantle
#

i think

#

idk

#

LOL

#

On hypixel skyblock theres a sound if you hit a double, triple etc hit

#

this

#

how do i find out what its called?

#

kinda sounds like a spider

indigo crypt
# oblique pike

oh bro, its steel has a name. how you setname when entity die.

oblique pike
#

EntityDeathEvent?...

quaint mantle
#

question

indigo crypt
#

yes, i set it

quaint mantle
#

question

#

i have a question

#

is GeyserMC & floodgate safe to use

#

like, is Player#getName() still functional

torn shuttle
#

finally

#

it's been over 100h but I've managed to compiled a build of my rewrite

opal juniper
quaint mantle
summer scroll
#

Can I add maven modules to my project? Like include the module, right now I only know how to create a module but in separate project and shaded the module into my project.

opal juniper
#

You can

#

You need a pom at the root

summer scroll
#

Okay, what should I do first? I have my project right here.

opal juniper
#

Defining all the <module>

indigo crypt
#

how to setname when entity die.

opal juniper
#

It’s dead????

indigo crypt
quaint mantle
summer scroll
opal juniper
#

Why?

#

It seems already moduled

opal juniper
summer scroll
#

Because it's in different project, and to use them I need to run maven install and shaded it into my project, which take a lot of time honestly.

ivory sleet
#

I mean using gradle could increase performance in terms of time if you’re interested in that

indigo crypt
summer scroll
#

And now it's giving NoSuchMethodError for some reason.

ivory sleet
#

Do you shade in the right stuff into your final jar?

summer scroll
#

yes, i shaded it

opal juniper
#

Did you shade it or did you include the jar in ur jar

summer scroll
#

shade or relocated

opal juniper
#

Open it with like 7zip or sommin

ivory sleet
#

Which module is responsible for building your jar?

summer scroll
#

on the wrapper, i run maven install on the root

#

the parent of the module