#help-development

1 messages ยท Page 2255 of 1

delicate lynx
#

add an empty space between the 2 click ables

loud junco
#

new TextComponent(" ");

delicate lynx
#

yeah that

ebon topaz
#

how would you send event.getEntity() to console?

loud junco
#

what?

#

.toString i guess?

tacit dagger
loud junco
#

yes

#

of course before you add the deny component

vital trout
#

Is it possible to retrieve getFireTick() value of a Player in EntityDamageByEntityEvent when hit by a flame bow ? I mean it always return 100, like the flame effect triggers before the actual damage

ebon topaz
#

so i have the event to get the teleport for enderman but how could i get the block its going to teleport on to

tacit dagger
ebon topaz
#

there is getto() but i think thats just cords

loud junco
loud junco
tacit dagger
loud junco
#

i get it

#

because you're adding the spaces to the accept component directly

#

use a component builder

#

that's probably why

subtle folio
#

Why not just spigot()#sendMessage(textcomponent + " " + textcomponent)

loud junco
#

because impossible

subtle folio
#

is it?

loud junco
#

yes

subtle folio
#

i thought bungee was better

#

cool

#

isn't there a component builder?

loud junco
#

there is i just said it few messages above

subtle folio
#

Then use that lol

loud junco
#

i told him to

#

/ her

#

idk

ebon topaz
quaint mantle
#
if (clickedBlock.getType() == STONE_BUTTON) {
            event.setCancelled(true);
            event.getPlayer().sendMessage("You clicked a stone button!");

How do I put a cooldown on how fast some things can be activated?
Say I want to cancel every stone button press, but I want to make it so I can only send the player the message once a second or less?

loud junco
loud junco
old turtle
#

runescape is the best game

quaint mantle
loud junco
#

hashmap

#

you know what that is?

mortal hare
#

for example you can use strings to return stored object

#

instead of looping through entire array or list and comparing it till you find one

#

for example: map.get(Player's uuid) can return Player object

#

but it can return things entirely different than that. the choice is yours what to store there

loud junco
# quaint mantle what is a map and how do I store things in a map
        // Creating a map using the HashMap implementation
        Map<Player, Long> cooldowns = new HashMap<>();

        // run this when player clicks your button
        cooldowns.put(player, System.currentTimeMillis());

        // check if it's 1 second
        if ((System.currentTimeMillis() - cooldowns.get(player)) > TimeUnit.SECONDS.toMillis(1)) {
            // run your super cool code, don't forget cooldowns.remove(player)
        }
#

this should be somehow correct

#

but i suggest look up how maps work

#

they are big and extremely useful

loud junco
#

so don't just use code without trying to understand it

quaint mantle
mortal hare
#

example:

Map<UUID, SkyIsland> islands = new HashMap<>();

map.put(player.getUniqueId(), new SkyIsland(x, y, z)); // Store your island with a key as a player's UUID
ebon topaz
#

how could i teleport a specific player to cords?

loud junco
#

Player#teleport(Location)

#

you need to make a location object or get it from somewhere

mortal hare
#

and somewhere else:

SkyIsland island = map.get(player.getUniqueId());

would return you that SkyIsland object by you specifying the key (in this case player's UUID)

mortal hare
#

and then multiple it by 20

vital trout
#

also @mortal hare i did find a way to remove arrows in body, in EntityDamageEvent

Bukkit.getScheduler().scheduleSyncDelayedTask(Main.getInstance(), () -> ((Player)event.getEntity()).setArrowsInBody(0),1);
mortal hare
#

you'll get an rough average

#

oh yeah

#

arrows inside player are not really entities

#

that's why it didnt work

vital trout
mortal hare
#

no

#

i mean physically measure the time

#

๐Ÿ˜„

#

how much time does it take for fire to cool off

#

and then multiply it by 20

#

to get it in ticks

#

then you'll get an rough estimate

#

i bet you can do this more clean by using NMS but bukkit api shouldnt always return 100 when player is ignited wtf

vital trout
#

Oh yeah but i think it won't work for what i'm trying to do, I want to increase the damage of Arrow by 20% if the target is on fire
So all operations must be done in the event

#

It works with the sword tho

vital trout
#

But with a flame bow it always return 100

ebon topaz
loud junco
quaint mantle
#

The Player has to be predefined else where before teleporting other wise it wont know who the player is

ebon topaz
#

CraftBlock{pos=BlockPosition{x=-18, y=-64, z=36},type=DEEPSLATE_TILE_SLAB,data=Block{minecraft:deepslate_tile_slab}[type=bottom,waterlogged=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@70b31415} how do i get the type=bottom?

paper viper
#

BlockFace?

ebon topaz
vague swallow
#

How can I check if a sign is placed around a chest?

quaint mantle
#
applyPatches.sh (line 3): Unsupported use of '='. In fish, please use 'set PS1 "$"'.
warning: Error while reading file applyPatches.sh

Error compiling Spigot. Please check the wiki for FAQs.
If this does not resolve your issue then please pastebin the entire BuildTools.log.txt file when seeking support.
java.lang.RuntimeException: Error running command, return status !=0: [/usr/bin/fish, applyPatches.sh]
    at org.spigotmc.builder.Builder.runProcess0(Builder.java:973)
    at org.spigotmc.builder.Builder.runProcess(Builder.java:904)
    at org.spigotmc.builder.Builder.main(Builder.java:703)
    at org.spigotmc.builder.Bootstrap.main(Bootstrap.java:27)

Trying to compile 1.8.8 using buildtools, but I get this error?

#

Im using fish as shell

#

but when I use the command set PS1 "$", I get an error:

fish: Expected a variable name after this $.
set PS1 "$"
         ^
#

Fixed it by adding SHELL=/bin/bash before the command

lost matrix
tardy delta
buoyant viper
#

a wolf gettingg left clicked by a player would just be the EntityDamageByEntity event right?

sleek dragon
#

anyone here have experience with implementing the Firebase API into their plugin? I got it all working with sending and retrieving data including POJOs, but when I try to implement a SpigotAPI Location type variable into the POJO it gives me an error. Any way to make it so I can store POJOs with custom types and have them be retrievable? Do I have to cast it to a string on storage somehow then recast it back on retrieval or is there a better way?

sleek dragon
glossy venture
sleek dragon
#

Storing Custom Variable POJOs in Firebase

ebon topaz
#

CraftBlock{pos=BlockPosition{x=-18, y=-64, z=36},type=DEEPSLATE_TILE_SLAB,data=Block{minecraft:deepslate_tile_slab}[type=bottom,waterlogged=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@70b31415} how do i get the type=bottom?

vague swallow
worldly ingot
#

Slab slab = (Slab) block.getBlockData();

crude loom
#

How do I create a Runnable that receives a variable?
So far I just declared it inside a method, is it the right way to do that?

red sedge
#
    public void onVillager(VillagerCareerChangeEvent event) {
        for (MerchantRecipe rec : event.getEntity().getRecipes()) {
            rec.setPriceMultiplier(2);
            if (rec.getResult().getType() == Material.ENCHANTED_BOOK) {
                rec.setMaxUses(1);
            }
        }
        event.setCancelled(event.getProfession() == Villager.Profession.FLETCHER || event.getProfession() == Villager.Profession.ARMORER);
    }

    @EventHandler
    public void onVillagerReplenish(VillagerReplenishTradeEvent event) {
        event.getRecipe().setPriceMultiplier(2);
    }```
no errors, but it doesnt work at all p.p
sleek dragon
red sedge
#

yep

sleek dragon
#

could you paste that here too

red sedge
#

getServer().getPluginManager().registerEvents(new VillagerFix(), this);

#

i found the issue

#

event.getEntity().getRecipes()
returns nothing

lost matrix
red sedge
#

javadocs arent really helpful

dusk flicker
#

What is it asking for?

red sedge
#

merchantrecipe

dusk flicker
#

My bet is it's the price besides emeralds that's required

#

Such as the book for enchantment trades + whatever emerald value

sleek dragon
#

if the player has the Hero of the Village effect they usually get a discounted price. could it be that?

#

could be the secondary trade item too tho

red sedge
#

im pretty sure that chnges the priceMultiplier

tardy delta
#

ยฏ_(ใƒ„)_/ยฏ

#

ah yes i click on the maven tab and it dissapears

paper viper
#

No input/output -> Runnable
1 Input/no output -> Consumer
no input/1 output -> Supplier
1 input/1 output -> Function
2 inputs/no output -> BiConsumer
2 inputs/1 output -> BiFunction

#

Correct me if Iโ€™m wrong

echo basalt
#

There are some specifics like Predicate iirc

tardy delta
#

1 output for bifunction kekw

paper viper
#

Oh oops

#

LMFAO

echo basalt
#

there's nothing with 2 outputs lmao

paper viper
#

Yeah XD

tardy delta
#

hehe tuples

echo basalt
#

I honestly haven't seen a public plugin use tuples any often

tardy delta
#

hmm i broke my project.. again...

#

i guess it cant see the pom

#

its in the right location no?

crude loom
river oracle
tardy delta
#

uhh it said that dependency reduced pom file wasnt a project file

#

and i clicked edit anyway and it looks like it worked

clever musk
#

When biomes become abstract, will I be able to define grass color, sky color, etc for specific biomes?

ivory sleet
#

Presumably yup

clever musk
#

What about changing them on the fly?

ivory sleet
#

I mean perhaps that might make it to the api

#

Doesnโ€™t sound unreasonable

quaint mantle
#
  @EventHandler
    public static void detectButtonPress(PlayerInteractEvent event) {
        Block clickedBlock = event.getClickedBlock();
        Player p = event.getPlayer();
        Map<Player, Long> cooldown = new HashMap<>();
        if (clickedBlock.getType() == STONE_BUTTON) {
            event.setCancelled(true);

            if((cooldown.get(p) + 5) >= (System.currentTimeMillis() / 1000)){
                p.sendMessage("you have pressed a stone button!");
                cooldown.remove(p);
            }
            cooldown.put(p, (System.currentTimeMillis() / 1000));
        }
    }

This sends me a huge error log but primarily:

at java.base/java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Long.longValue()" because the return value of "java.util.Map.get(Object)" is null
at LadsActionButton.EventListener.detectButtonPress(EventListener.java:28) ~[?:?]

Line 28 is "if((cooldown.get(p) + 5) >= (System.currentTimeMillis() / 1000)){"

tardy delta
#

clicked block might be null too

#

and that error says that the entry isnt present in the map

quaint mantle
#

clicked block?

#

I tested earlier with sending a message to player, but I want it to have a cooldown of a second so you cant spam the button

paper viper
#

You really should either use a weak hash map with Player or use UUID

#

Donโ€™t just use Player alone with normal map because of the player disconnects the Player object is invalidated

tardy delta
#

or use a cooldown manager kekw

#

dunno why he would call get on an empty map lol

crude loom
#

How can I display a permanent title to a player?

paper viper
#

Create a repeating task that sets the title for the player for a long duration

crude loom
#

What's the maximum amount of ticks that I can set a title for?

tardy delta
#

Long.MAX_SIZE lol

#

just stop the task when the user leaves

crude loom
#

The stay variable is an int though

tardy delta
#

while user.isOnline() ๐Ÿ˜ข

crude loom
#

and Integer.MAX_VALUE doesn't work

tardy delta
#

its a long

paper viper
#

Yeah

tardy delta
#

ah for the title i thought you were talkinb bout scheduler methods

crude loom
#

oh I wasnt haha

#

so any idea whats the maximum tick time?

tardy delta
#

that method doesnt say

ivory sleet
#

afaik itโ€™s an int

#

So the java int limit

crude loom
#

but Integer.MAX_VALUE doesn't work

ivory sleet
#

Hmm

paper viper
#

You set it for stay

#

Right?

#

Fade in and fade out shouldnโ€™t be max value

sage dragon
#

Is there a way to have persistent custom data for mobs?

eternal night
#

?pdc

sage dragon
eternal night
ivory sleet
#

Anything that implements PersistentDataHolder

tardy delta
#

livingentities have them right

eternal night
#

smh wrong interface conclure

ivory sleet
#

Woops

ebon topaz
#

how do i do a if not then return thing?

crude loom
tardy delta
#

shell noob basically :(

paper viper
ebon topaz
#

if (event.getEntity().toString() != "CraftEnderman") {return} idk something like that @paper viper

tardy delta
#

AAAAH

#

smh

paper viper
#

Oh god

tardy delta
#

those paper fuckers where laughing at me for running a server on a pi ๐Ÿ˜ญ

paper viper
#

Get the entity type instead and check off of that

tardy delta
#

well uhh is this valid syntax then?

readonly java_args=(
  -Xms3G # Set heap min size
  -Xmx4G # Set heap max size
)```
worldly ingot
#

Yeah. It's a tuple

#

Think of it like an array

tardy delta
#

weird stuff anyways

eternal needle
#

Hi, is it poseble for me to desable commands in config and remove the command? tag me

paper viper
#

I suppose you could remove from command map

eternal needle
paper viper
#

?

#

I wonโ€™t give you code

#

You have to try something at least

eternal needle
#

no

#

but can i do it?

paper viper
#

Yeah itโ€™s definitely possible

eternal needle
#

and what do i need to do?

paper viper
#

If thatโ€™s what you mean

eternal needle
quaint mantle
#

is it normal for getPlayer().getInventory().getContents()) to only return the items in players hotbar? and not all 36 slots?

quartz basalt
#
        ArrayList<FallingBlock> blocks = fallingBlocks.get(name);
        for (FallingBlock block : blocks) {
            Location blockLocation = block.getLocation();
            Vector onePercent = loc.subtract(blockLocation).toVector().multiply(1d / time);

            new BukkitRunnable() {
                int iterations = 0;

                @Override
                public void run() {
                    block.teleport(blockLocation.add(onePercent));
                    iterations++;
                    if (iterations >= time) {
                        this.cancel();
                    }
                }
            }.runTaskTimer(XKits.getInstance(), 0, 1);
        }
    }``` i have a 3x3 platform of fallingblocks that just stay there so i can move them but with this the 3x3 platform squishes into 1 block and then moves how can i make it so they all move together and dont just squish together
lost matrix
quartz basalt
sage dragon
#

Is the EntityTargetEvent also fired if the target reason is "LoveMode"?

tardy delta
#

uh ohh

lost matrix
quartz basalt
#

i would assume they would be different since im adding a vector that depends on the locaiton of each block

#

also if i switched to velocity id basically need to redo everything

lost matrix
crude loom
#

For anyone interested in the solution for my question earlier
The reason I couldn't set the max Integer value to the title time was that the game probably counts the fade in and fade out time as well so I needed to remove that from the stay time:
p.sendTitle(title,subtitle,10,Integer.MAX_VALUE-20,10);

marble copper
#

Anyone wants to recommend me a good hosting service which can run 40+ players and 60+ plugins on 20 tps? and it should also be relatively cheap like 2$ per gb

crude loom
#

I use pebblehost for my test server
I don't know if they are good on the larger scale but they are cheap for what I ordered

dusk flicker
#

Don't ask in multiple channels

lost matrix
marble copper
#

tf

sage dragon
#

Hey,

Is there a way to manipulate which entity is chosen when in LoveMode?

marble copper
#

i used aternos before which is a free hosting and it runs 40+ players and 35 plugins on 15 tps lmao

#

and as far as i know ram isnt really important

sage dragon
marble copper
#

cpu is

lost matrix
#

You can run one server per core. I would recommend not going over 8 servers with 100 players each.

quartz basalt
#

when i tried using vectors the blocks went flying the opposite direction, no where near my location block.setVelocity(blockLocation.toVector().add(onePercent));

sage dragon
lost matrix
sage dragon
lost matrix
#

Ignoring IO and and some chunk stuff

lost matrix
lost matrix
crude loom
#

For some reason when I set a high value in the stay variable in player.sendTitle it doesn't slowly fades in or out it just waits for the time I set and pops the title immediately, this fixes when I set a smaller value.
I can set a repeating task that will set a smaller value but that seems unnecessary
Any idea as to why is this happening?

lost matrix
#

2 million should be enough. Thats like 28 hours or so.
What are you even trying to do?

crude loom
#

I'm making an AFK plugin so when a player is AFK I send them a title that says it

glossy venture
crude loom
glossy venture
#

just keep sending it

lost matrix
glossy venture
#

while they are afk

#

keep sending the title

#

every like 5 minutes

marble copper
lost matrix
glossy venture
#

if 40+ players are all spread out, thats definitely going to use some ram

marble copper
#

but i cant find a good host

lime wave
#

how can i do like "/execute if block ~ ~-1 ~ minecraft:obsidian or minecraft:crying_obsidian"?

lost matrix
#

I dont know any "gaming" host that is not a total rip off.

paper viper
#

I guess

marble copper
#

i only have 8 gb ram in my pc

paper viper
#

Thatโ€™s the best option

glossy venture
#

with a render distance of 8, 40 players, worst case scenario youre going to be loading 11560 chunks

paper viper
#

The next best is probably like a vps or something

glossy venture
#

oracle free tier pretty good

#

idk about cpu power but if you pregen the world that should be fine

#

it has 24 gb of ram

quartz basalt
loud junco
#

hosting a production server on your own pc that does not even run 24/7 is not the best option, but the worst

#

buy a proper machine

paper viper
#

No, I mean like assuming he actually had a server computer. Of course hosting yourself is the best in that case

#

Turns out the message sent after he said he would use his PC :/

loud junco
#

yes, on a server it would be alright

glossy venture
loud junco
#

in the case that it's properly managed in his house and wont burn it down lmao

quartz basalt
loud junco
#

the best thing is just to buy a machine and put it in a datacenter imo

glossy venture
#

that would work with even amounts of blocks too

#

for getting it, store it when created

quartz basalt
#

anything tbh it doesnt need to be centralized at the location

marble copper
#

i want to use a host so does anyone know what a good server host is?

quartz basalt
#

i have it stored in an arraylist so id just get the 1st block in the list right?

glossy venture
#

idk

#

if thats how it generated

#

that would work

quartz basalt
#

players can select a region with we then i store the blocks in the selection

glossy venture
severe turret
glossy venture
#

and then use some math

#

to figure out the coords from a 1d index in the array

crude loom
glossy venture
#

or store another array list with all the offsets and generate them at the start

glossy venture
#

to answer your question, no

#

but why

crude loom
#

oh, then I will ask another question, in order to schedule a repeating task that recieves a variable I've always just set a runnable inside a method
is that the right way of doing htat?

glossy venture
#

to pass in variables, you can use

final Object val;

/* some method */ (/* runnable */ () -> { 
  if (val == null) // do whatever
});
#

they have to be final

#

so if they change but they dont need to reflect into the lambda, copy them to a final var

#

otherwise use an Atomic<Type>, for example AtomicInteger or AtomicReference<T>

severe turret
#
        Double coordX = Double.parseDouble(array[0]);
        Double coordY = Double.parseDouble(array[1]);
        Double coordZ = Double.parseDouble(array[2]);
        Location hiveLocation = new Location(MobCapturer.world, coordX, coordY, coordZ);```
#

is this a good way to parse location from json

crude loom
glossy venture
#

in my example i was passing in the runnable, so for example

for (int i = 0; i < l; i++) {
  // copy to final var
  final int fi = i;
  // some schedule method, just an example
  schedule(() -> {
    System.out.println(fi);
  });
}
glossy venture
#

so they might contain a .

#

which would result in smth like

0.0.26.0.5.3
x   y    z

which the computer cant tell apart

crude loom
glossy venture
#

its declared using a lambda

severe turret
# glossy venture usually `,` is used as a separator, as they are tostringed as doubles
        JsonObject json = new JsonObject();
        String[] array = String.valueOf(json.get(elementName)).split(",");
        Double coordinationX = Double.parseDouble(array[0]);
        Double coordinationY = Double.parseDouble(array[1]);
        Double coordinationZ = Double.parseDouble(array[2]);
        Location location = new Location(MobCapturer.world, coordinationX, coordinationY, coordinationZ);
        return location;
    }```
#

so something like this?

severe turret
#

okay thanks

glossy venture
tardy delta
#

it smells what it needs

quartz basalt
# quartz basalt ``` public static void moveBlocks(String name, Location loc, double time) { ...
        ArrayList<FallingBlock> blocks = fallingBlocks.get(name);
        for (FallingBlock block : blocks) {
            Location blockLocation = block.getLocation();
            Vector onePercent = loc.subtract(blockLocation).toVector().multiply(1d / time);

            new BukkitRunnable() {
                int iterations = 0;

                @Override
                public void run() {
                    double offsetx = centerLocation.get(name).getX() - blockLocation.getX();
                    double offsety = centerLocation.get(name).getY() - blockLocation.getY();
                    double offsetz = centerLocation.get(name).getZ() - blockLocation.getZ();

                    block.teleport(blockLocation.add(onePercent).add(offsetx, offsety, offsetz));
                    iterations++;
                    if (iterations >= time) {
                        this.cancel();
                    }
                }
            }.runTaskTimer(XKits.getInstance(), 0, 1);
        }
    }``` why doesnt this work? the blocks kinda just scatter in a line in the opposite direction of the location i give ```centerLocation.get(name)``` is the center location of the platform
glossy venture
#

get the center location and calculate the offset outside of the lambda for performance

severe turret
# glossy venture i hope `JsonObject json = new JsonObject();` is just for example, because thats ...
    public void apply(Bee entity, JsonObject json) {
        super.apply(entity, json);
        entity.setHive(parseLocationFromJson(json,"hiveLocation"));
        entity.setHasNectar(json.get("hasNectar").getAsBoolean());

    }

    public Location parseLocationFromJson(JsonObject json, String elementName) {
        String[] array = String.valueOf(json.get(elementName)).split(",");
        Double coordinationX = Double.parseDouble(array[0]);
        Double coordinationY = Double.parseDouble(array[1]);
        Double coordinationZ = Double.parseDouble(array[2]);
        Location location = new Location(MobCapturer.world, coordinationX, coordinationY, coordinationZ);

        return location;
    }```
#

this is going to be the usage

#

idk

glossy venture
#

yeah

#

works

glossy venture
#

yeah im trying to see why not

#

can u send screenshot

#

through imgur

#

or verify rq

quartz basalt
#

of what it does?

tardy delta
#

!verify

glossy venture
#

yeah

undone axleBOT
#

Usage: !verify <forums username>

glossy venture
#

the reuslt

quartz basalt
#

ok 1 sec

severe turret
#

Okay thanks man

quartz basalt
#

https://imgur.com/a/Yfc2IFS black arrows and circles is what happened red arrow is where the 3x3 grass block platform is supose to move to there are more grass blocks in a line just what my screenshot could fit

glossy venture
#

you probably have the offset or center calculation wrong

#

can i see where you create the platform

quartz basalt
#

center calculation uses world edit

#
        File f = new File(XKits.getInstance().getDataFolder().getAbsolutePath() + File.separator + "storage" + File.separator +"platforms.yml");
        YamlConfiguration fc = new YamlConfiguration();
        try {
            fc.load(f);
        } catch (IOException | InvalidConfigurationException e) {
            throw new RuntimeException(e);
        }
        ConfigurationSection sec = fc.getConfigurationSection(name);
        ArrayList<FallingBlock> stand = new ArrayList<>();
        for (String key : sec.getKeys(false)) {
            ConfigurationSection sec2 = fc.getConfigurationSection(name + "." + key);
            Location loc = sec2.getLocation("location");

            FallingBlock fb = loc.getWorld().spawnFallingBlock(loc.add(0.5, 0, 0.5), Bukkit.createBlockData(Material.valueOf(sec2.getString("type").toUpperCase())));
            fb.setGravity(false);
            fb.setDropItem(false);
            fb.setInvulnerable(true);
            fb.setTicksLived(2147483647);
            stand.add(fb);
        }
        fallingBlocks.put(name, stand);```
glossy venture
#

also youre always teleporting to the same block location

quartz basalt
#

wdym

glossy venture
#

you dont update the blockLocation variable

#

in the loop

quartz basalt
#

o h

glossy venture
#

or does it change it

#

in the mehtod

#

wait a sec

torn shuttle
#

hey guys is possible to get sign text from block data?

glossy venture
#

it changes the instance

#

so it should work

#

ooh

#

dude

#

you have to add the offset at the start

#

not inside the loop

quartz basalt
#

wdym

glossy venture
#

it keeps offsettting itself

#

youre offsetting it more every iteration now

dim palm
quartz basalt
#
  • before the runnable
glossy venture
#

yeah

tardy delta
#

uh ohh i see alot of abuse there

#

and then using a command framework :/

quartz basalt
#

        for (FallingBlock block : blocks) {
            Location blockLocation = block.getLocation();

            double offsetx = centerLocation.get(name).getX() - blockLocation.getX();
            double offsety = centerLocation.get(name).getY() - blockLocation.getY();
            double offsetz = centerLocation.get(name).getZ() - blockLocation.getZ();

            Vector onePercent = loc.subtract(blockLocation).toVector().multiply(1d / time);

            new BukkitRunnable() {
                int iterations = 0;

                @Override
                public void run() {

                    block.teleport(blockLocation.add(onePercent).add(offsetx, offsety, offsetz));
                    iterations++;
                    if (iterations >= time) {
                        this.cancel();
                    }
                }
            }.runTaskTimer(XKits.getInstance(), 0, 1);
        }``` the blocks just fly off in every direction now i could only find 1 block so they seem to be going very far away individualy not as a group
sage dragon
#

The UUID of an entity is persistent, right?

glossy venture
quartz basalt
#

oh

quartz basalt
glossy venture
#

blockLocation

#

move it out of the runnbale

#

runnable

tardy delta
#
  1. singletons, why?
  2. exposing collections
  3. not following conventions for method names
  4. you can use early returns
  5. Material#valueOf throws an exception if the str doesnt match perfectly, use #matchMaterial instead
  6. probably more stuff
#

lol

#

@dim palm

dim palm
tardy delta
#

me everyday

glossy venture
#

cant take critisism lol

tardy delta
#

i only can if its based

torn shuttle
quartz basalt
# glossy venture `blockLocation`

only 1 block moves but the rest just seemingly dissapear.. do you know whatd be causing that? ``` ArrayList<FallingBlock> blocks = fallingBlocks.get(name);

    for (FallingBlock block : blocks) {
        double offsetx = centerLocation.get(name).getX() - block.getLocation().getX();
        double offsety = centerLocation.get(name).getY() - block.getLocation().getY();
        double offsetz = centerLocation.get(name).getZ() - block.getLocation().getZ();
        Location blockLocation = block.getLocation().add(offsetx, offsety, offsetz);

        Vector onePercent = loc.subtract(blockLocation).toVector().multiply(1d / time);

        new BukkitRunnable() {
            int iterations = 0;

            @Override
            public void run() {

                block.teleport(blockLocation.add(onePercent));
                iterations++;
                if (iterations >= time) {
                    this.cancel();
                }
            }
        }.runTaskTimer(XKits.getInstance(), 0, 1);
    }```
glossy venture
tardy delta
#

Map<String, List<FallingBlock>> ew

quartz basalt
#

me?

tardy delta
#

i guess

quartz basalt
#

it works ๐Ÿ˜„ so :p

tardy delta
#

if nasas code just worked too they wouldnt have reached the moon

glossy venture
#

making a FallingPlatform class would be better

#

and storing all data in there

quartz basalt
#

its stored in a file

glossy venture
#

you can parse that

#

and load it

quartz basalt
#

yes i use the data from the file

quartz basalt
subtle folio
#

Is it possible to make a certain thingy happen every week, even if the server goes offline for a portion of the week?

kind hatch
subtle folio
#

can I get an example?

#

or a rundown

#

psuedo me

kind hatch
#

Make two ItemStack variables. One is your original state. The other your updated state. In your runnable, update the player inventory with the old state once the period is up.

#

Well, there are a couple ways you could do it. There is the server time which only ticks up as long as the server is online.
There is also the system time and timestamps which you can use.

You'd want to keep track of the time on startup and shutdown.

Then in your system for executing events, you'd take one of those points as your reference point then subtract your current time from it to get the difference. If it's greater than one week, do your stuff. Otherwise, keep waiting.

subtle folio
#

so for example save the System.TimeCurrentMilis

#

then every hour or smt

#

check if it - system.teimcurentmilies is greater than > 7 * 24 * 60 * 60 * 1000?

kind hatch
#

You may want to convert the timestamp to a date for easier comparisions, but essentially yea.

ivory sleet
#

I mean in startup you start a scheduled executor service where you schedule the task, whenenever the server instance shut downs save the date and on startup read it again and do what I mentioned in the beginning.

ivory sleet
#

You can turn the different time stamps into Instant instances and use the delta method

subtle folio
#

i see

kind hatch
#

Yea, there's several ways to convert a timestamp into a usable object.

subtle folio
#

does system.timeCurrentMilis go up only when the server is online?

subtle folio
glass mauve
#

anything you need to know about Time ;)

ivory sleet
#

No not really

kind hatch
#

#currentTimeMillis() is always ticking up as long as your computer is up.

tardy delta
#

system time

subtle folio
#

say the program shuts down

#

but then turns back on

#

would it still track and go up?

tardy delta
#

Optional<Cat> irl ๐Ÿ˜‚

subtle folio
#

and compensate for lost time?

kind hatch
#

So yes, it will constantly tick up.

ivory sleet
#

I mean it shows accurately all the time

subtle folio
#

alright

#

thank you all โค๏ธ

ivory sleet
crimson terrace
#

and calling isPresent() is the same as opening the box

tardy delta
#

dunno why but im watching vid about java optionals alto i need how to work with it lol

#

bored ig

crimson terrace
#

I am so sad that video came out a week after I needed it XD

ivory sleet
#

Optional is ehm well good but a bit late, wouldโ€™ve been needed since the very start of Java

tardy delta
#

some older java version added ::ifAbsent attho ::ifPresent is a thing lmao

ivory sleet
#

Ye

tardy delta
#

they were bored too

ivory sleet
#

lol ye

west scarab
#

why doesn't this work?

#
        dead_bush = p.getInventory().getItem(Material.DEAD_BUSH).getAmount();
glass mauve
#

also naming conventions

west scarab
#

says "cannot resolve method"

glass mauve
#

should be deadBush

glass mauve
quartz basalt
west scarab
#

getItem(org.bukkit.material)

west scarab
quartz basalt
#

idk easiest thing i can think of is looping

glass mauve
#

I think there is no method

tardy delta
#

kinda obvious that it doesnt work if there is no such method

glass mauve
#

maybe try Inventory#all(org.bukkit.Material);

#

then maybe use streams

stoic vigil
#

how to make tabable subcommands? so that they are there if you press tab?

glass mauve
quartz basalt
tardy delta
#

their should be a faq page here tbh

stoic vigil
west scarab
glass mauve
#

and have some kind of sum variable

stoic vigil
tardy delta
#

tf, no need to sort and you can just return StringUtil.compyPartialMatches

quartz basalt
stoic vigil
#

ahhh no, found it thy

#

sry for asking again :/

glass mauve
west scarab
glass mauve
#

no that would add the count of the stack

tardy delta
#

check the length of the args
so for example if you want to use /home create and /home list
it would look like

if (args.length == 1) {
  return StringUtil.copyPartialMatches(args[0], List.of("create", "list"), new ArrayList<>());
}```
glass mauve
#

so if you have for example 3 different stacks in your inventory like 32, 5 and 58 Dead Bushes
it will add 32, 5 and then 58 to the sum variable

quartz basalt
tardy delta
#

if i dont want to expose a collection to the outer world but they still need the whole collection, whats the best thing to return?

  • new HashMap<>(innerHashMap)
  • Collections.unmodifableMap(innerhashMap)
quiet ice
glass mauve
#

yea, you shouldnt in this case.
I didnt know that #all returns a HashMap and I hate to use streams for hashmaps

tardy delta
#

well i just want to iterate over the map and print the entries, thats all i need

quiet ice
#

Then unmodifable map is the way to go, there is nothing that can go wrong there anyways

#

new HashMap allocates a shallow clone of the hashmap, which may not be intended

tardy delta
#

mmmh

#

good

undone axleBOT
eternal needle
#

hi can i stopp a command with his? config is false
if(!instance.getConfig().getBoolean("Freeze-Enabled")){
player.sendMessage("StaffChat is not enabled.");
event.setCancelled(true);

pulsar zenith
#

Are you not using the command executor api?

eternal needle
#

yes, i am

pulsar zenith
#

Why are u cancelling an event?

tardy delta
#

whats the best way to colorize a string without knowing if it contains hex colors and color codes?

crisp steeple
#

whatโ€™s the point of the hashmap here?

#

just save the durability as an int

#

also that method will throw an exception in most cases

torn shuttle
#

anyone happen to know if there's an easy way to deserialize an itemstack string?

#

the deserialize method requires a map

earnest forum
#

wdym string

torn shuttle
#

I serialized an itemstack, made that a string to store in a config line and am now trying to deserialize the string

earnest forum
#

how did u serialize

torn shuttle
#

itemStack.serialize()

earnest forum
#

doesnt the deserialize method come from configurationserializable

torn shuttle
#

yes

#

I wanted it as a single line

#

is why I didn't serialize it in the more normal way

earnest forum
#

u should use base64

torn shuttle
#

because it's a part of a string list

earnest forum
#

can you show me the string?

torn shuttle
#
  • serialized={v=2975, type=ENCHANTED_BOOK, meta=ENCHANTED_META:{meta-type=ENCHANTED,
    stored-enchants={PROTECTION_ENVIRONMENTAL=1}}}:amount=1-3:chance=.5
earnest forum
#

u might have to manually parse it

#

to deserialize

#

look at this

torn shuttle
#

yeah that's what I sort of was hoping I wouldn't have to do

earnest forum
#

serializes items to base 64

#

a single string

#

and also deserializes

#

its for inventories but you can adapt it to ur use case

torn shuttle
#

yeah guess I'll go that way, than ks

dim palm
#

Hello, how can i pass the instance to another class if i dont implement listener or somethin?

glass mauve
#

whcih instance?

#

of your plugin?

dim palm
#

i don't wanna use static methods

glass mauve
#

then use constructor

dim palm
#

any example? (im new to java and spigot api)

glass mauve
#

or this:

#

?di

undone axleBOT
earnest forum
#

dependency injection is not only used for listeners

#

its for every class

daring lark
#

how could i change player name?

ashen quest
#

so i was in class and idk why my brain randomly remember this and then i realized the name is a pun on "path"
Pathetic

kind hatch
#

Lmao, I'm out here giving WorldEdit a run for their money with their startup messages telling you to use paper. At least this is configurable though xD

#

And people say startup info isn't important. smh

lost wolf
#

How can we kickstart the zombie villager curing process programatically?
Setting the ConversionPlayer and ConversionTime enough? Or there is another way to achieve this?

quartz basalt
#

i have this which is supose to move a 3x3 platform to a given location but only 1 of the blocks moves and the rest just go off to random places https://pastebin.com/2DpTANXY video: https://drive.google.com/file/d/1TLJSNzh297MCnFOJre7Cjt8TnF4NW2K4/view?usp=sharing why is this happening? the blocks are supose to move together to keep the 3x3 shape over a period of time which the 1 in the video does fine but the rest seem to have a mind of there own and teleport all over the map , since there is a 3x3 square there are 9 blocks so i broadcasted their location each interval and https://pastebin.com/puiFXuuK shows how they are going all over the place for no reason at all since each block has its own variables none are static or used by all the blocks

glossy scroll
#

make sure you're using location.clone before you add if necessary

#

ive not taken a super deep dive into the code but it seems you may need to do that

#

location.add will modify the object to hold new x/y/z values forever

#

sometimes that's not necessary, and you just want a completely new location without mutating the original

timid pulsar
#

why it doesnt heal me if I have 9+ hearts

chrome beacon
#

Because you can't set hp higher than max health

glossy scroll
#

Math.min(newHealth, maxHealth)

#

would be the easiest way

#

to do that

timid pulsar
#

k ty

chrome beacon
#

^

quartz basalt
#

i just added Location blockLocation = block.getLocation().clone().add(offsetx, offsety, offsetz); same issue

glossy scroll
#

try to clone loc before you subtract?

#

i should probably take a closer look

pliant tundra
#

how do i get my command to send the missing permissions error message if the sender is not opped

glossy scroll
#

i think this is definately what you need to do

lost wolf
#

How can we kickstart the zombie villager curing process programatically?

quartz basalt
#

might have done this wrong ``` Location center = fallingBlocks.get(name).get(0).getLocation();
for (int i = 0; i < fallingBlocks.get(name).size(); i++) {
FallingBlock block = fallingBlocks.get(name).get(i);
loc.clone();

        double offsetx = center.getX() - block.getLocation().getX();
        double offsety = center.getY() - block.getLocation().getY();
        double offsetz = center.getZ() - block.getLocation().getZ();

        Location blockLocation = block.getLocation().add(offsetx, offsety, offsetz);
        Vector onePercent = loc.subtract(blockLocation).toVector().multiply(1d / time);

        new BukkitRunnable() {
            int iterations = 0;

            @Override
            public void run() {

                block.teleport(blockLocation.add(onePercent));
                iterations++;
                if (iterations >= time) {
                    block.teleport(block.getLocation().add(0.5, 0, 0.5));
                    this.cancel();
                }
            }
        }.runTaskTimer(XKits.getInstance(), 0, 1);
    }``` im not sure how .clone() works
#

because ^ doesnt work same issue

kind hatch
#

Location#clone() returns an exact copy of the location you want to clone.

Location loc1 = new Location(0, 100, 0);
Location loc2 = loc1.clone();```

loc2 = 0, 100, 0.
eternal oxide
#

block.teleport?

#

ah its a FallingBlock

quartz basalt
glossy scroll
#

where you have Vector onePercent

#

im saying use loc.clone.subtract

#

right now, loc.subtract will mutate the variable

#

which means on the next loop, loc will be different

#

thus all the blocks will go in unintended directions

#

except for the first

quartz basalt
#
        for (int i = 0; i < fallingBlocks.get(name).size(); i++) {
            FallingBlock block = fallingBlocks.get(name).get(i);

            double offsetx = center.getX() - block.getLocation().getX();
            double offsety = center.getY() - block.getLocation().getY();
            double offsetz = center.getZ() - block.getLocation().getZ();

            Location blockLocation = block.getLocation().add(offsetx, offsety, offsetz);
            Vector onePercent = loc.clone().subtract(blockLocation).toVector().multiply(1d / time);

            new BukkitRunnable() {
                int iterations = 0;

                @Override
                public void run() {

                    block.teleport(blockLocation.add(onePercent));
                    iterations++;
                    if (iterations >= time) {
                        block.teleport(block.getLocation().add(0.5, 0, 0.5));
                        this.cancel();
                    }
                }
            }.runTaskTimer(XKits.getInstance(), 0, 1);
        }``` same issue ๐Ÿ˜ข
#

would blockLocation need to be cloned or smthn?

glossy scroll
#

no i dont think so

quartz basalt
glossy scroll
#

right

#

are you sure that is the latest version of the code on the server?

quartz basalt
#

im using plugman but i can restart my server

glossy scroll
#

yea, i would do that to make sure

kind hatch
#

Where is your loc variable declared?

quartz basalt
#

sorry thought i had that in there 1 sec

#
        Location center = fallingBlocks.get(name).get(0).getLocation();
        for (int i = 0; i < fallingBlocks.get(name).size(); i++) {
            FallingBlock block = fallingBlocks.get(name).get(i);

            double offsetx = center.getX() - block.getLocation().getX();
            double offsety = center.getY() - block.getLocation().getY();
            double offsetz = center.getZ() - block.getLocation().getZ();

            Location blockLocation = block.getLocation().add(offsetx, offsety, offsetz);
            Vector onePercent = loc.clone().subtract(blockLocation).toVector().multiply(1d / time);

            new BukkitRunnable() {
                int iterations = 0;

                @Override
                public void run() {

                    block.teleport(blockLocation.add(onePercent));
                    iterations++;
                    if (iterations >= time) {
                        block.teleport(block.getLocation().add(0.5, 0, 0.5));
                        this.cancel();
                    }
                }
            }.runTaskTimer(XKits.getInstance(), 0, 1);
        }
    }``` loc is the location the platform should be moving to which is defined by the player
glossy scroll
quartz basalt
#

same issue after restart

#

could it be that all of the runnables of each block are picking up the last block's variables after the for loop?

glossy scroll
#

if i understand you correctly, no

quartz basalt
#

๐Ÿ˜Ÿ

glossy scroll
#

should loc also account for an offset?

kind hatch
#

I don't think I caught what you were trying to do here. What are you expecting to happen?

quartz basalt
#

the offset is there so it moves like a platform and they dont all teleport to the same location

glossy scroll
#

well actually

#

the offset isnt necessary

quartz basalt
#

if you watch the video i have a 3x3 grass platform which i want to move to a new location over a certain period of time

glossy scroll
#

if they're all moving in the same direction

#

you just need 1 direction vector

glossy scroll
#

as long as they move in the same direction at the same speed, they will all end up in the correct place over time

quartz basalt
#

ive tried vectors as well but they just scatter all over the place and id basically need to redo everything

glossy scroll
#

wdym

#

your direction vector would be final - initial

#

and this vector is the same for all of the blocks

quartz basalt
#

i had the same setup but all the blocks flew in different directions

glossy scroll
#

i dont think you're understanding

quartz basalt
#

yeah i understand

#

but right now its for teleporting id need to do more math and stuff to use vectors

glossy scroll
#

no

quartz basalt
#

and im not great with vectors so that isnt ideal

glossy scroll
#

you're not understanding

#
for every falling block:
  teleport to falling block location + direction
#

of course you can add in your runnable between these steps

#

and scale down the vector as necessary

#

but that's the code

quartz basalt
#

define vector direction: final location - initial location do you mean just getting the vector of the location its supose to go to and the location it starts at?

kind hatch
#

Yes

glossy scroll
#

the center of the final location - center of the initial location

quartz basalt
#

alright also wdym by teleport to falling block location + direction?

glossy scroll
#

all of the blocks should be using the same direction

#

fallingblock.getLocation().add(direction)

quartz basalt
#

ah

glossy scroll
#

i suppose

#

imagine a group of people

#

you want them to all move to a place relative to their starting position

#

if you tell them to all move "forward" for 10 seconds

#

theyll never bump into eachother and end in the correct position

quartz basalt
#

alright ill try it thanks

glossy scroll
#

that's the idea that's happening here

pliant tundra
#

does getKeys(true) (i.e. deep) give the entire path (for example among.us.sus)?

kind hatch
#

yes

pliant tundra
#

ok

kind hatch
#

It does it for every path though.

#

So you would get

among
among.us
among.us.sus
pliant tundra
#

oh

glossy venture
#

the values will be configuration sections tho

#

so you can just filter them out

#

or maps

#

not sure

#

pretty sure thed be config sections

pliant tundra
#

if among.us.sus contains the actual value

earnest forum
#

yes

glossy venture
#
among:
  us:
    sus: 1
among = ConfigurationSection[us=ConfigurationSection[sus=1]]
among.us = ConfigurationSection[sus=1]
among.us.sus = 1
coral pilot
#

can i change activation & tracking range at runtime?

west scarab
#

any idea how to convert like 10,000 to 10k, and stuff?

quartz basalt
# glossy scroll that's the idea that's happening here

i have ``` public static void moveBlocks(String name, Location loc, double time) {
Vector endCenter = fallingBlocks.get(name).get(0).getLocation().toVector(); // get the center of the location the blocks should end at
Vector startCenter = centerLocation.get(name).toVector(); // get the center of the current platform
for (int i = 0; i < fallingBlocks.get(name).size(); i++) {
FallingBlock block = fallingBlocks.get(name).get(i); // get the fallingblock entity
Vector onePercent = loc.clone().subtract(startCenter).toVector().multiply(1d / time); // get the value for linear motion

        new BukkitRunnable() {
            int iterations = 0;

            @Override
            public void run() {

                block.teleport(block.getLocation().add(endCenter.divide(onePercent))); // teleport the fallingblock
                iterations++;
                if (iterations >= time) {
                    block.teleport(block.getLocation().add(0.5, 0, 0.5));
                    this.cancel();
                }
            }
        }.runTaskTimer(XKits.getInstance(), 0, 1);
    }
}``` but im getting this error https://pastebin.com/ZNzZPCJ4
glossy venture
#

may be dividing by zero somewhere

glossy scroll
#

ok so multiple things are wrong here

#

should define the direction vector outside of the loop, becuase like i said before, it should be the same

glossy scroll
#

end-start

quartz basalt
#

the direction vector is the endCenter

#

that is where it should end

glossy scroll
#

no.....

#

direction is final - initial

quartz basalt
#

ah

glossy scroll
#

what's the purpose of loc again?

quartz basalt
#

loc is where the platform should end up

glossy venture
#

move the onePercent declaration outside the loop and make it final just to make sure you dont reassign it

glossy scroll
#

eh, making it final is unecessary because it's still mutable

#

that's where most trouble is with locations

glossy venture
#

true

#

but at least you know youre not reassigning it

glossy scroll
#

true

glossy scroll
#

the onePercent declaration should also only use endCenter and startCenter

quartz basalt
#

thats a good question it was like 2am when i made that part

glossy scroll
#

along with the multiplying thing you had

glossy venture
#

also @quartz basalt could you add java syntax highlighting to your code block next time
you can do so using "```java"

#

as the starting tag

quartz basalt
#

ok

glossy venture
#
Vector end;
Vector start;
Vector one = end.subtract(start).divide(time);
quartz basalt
#

"```java" public static void moveBlocks(String name, Location loc, double time) {
Vector endCenter = loc.toVector();
Vector startCenter = centerLocation.get(name).toVector(); // get the center of the current platform
Vector direction = endCenter.subtract(startCenter);
Vector onePercent = endCenter.subtract(startCenter).multiply(1d / time); // get the value for linear motion
for (int i = 0; i < fallingBlocks.get(name).size(); i++) {
FallingBlock block = fallingBlocks.get(name).get(i); // get the fallingblock entity

        new BukkitRunnable() {
            int iterations = 0;

            @Override
            public void run() {

                block.teleport(block.getLocation().add(direction.divide(onePercent)));
                iterations++;
                if (iterations >= time) {
                    block.teleport(block.getLocation().add(0.5, 0, 0.5));
                    this.cancel();
                }
            }
        }.runTaskTimer(XKits.getInstance(), 0, 1);
    }
}``` doesnt seem to work, no errors, but the platform just teleports away no idea where it goes but it doesnt go to the specified location
glossy scroll
#

woah woah woah

#

what are you doing here

#

direction.divide(onePercent)

glossy venture
#

what

quartz basalt
#

thats to make it smooth so it can go over x seconds

glossy scroll
#

(a-b)/((a-b)*1/t)

#

that is equal to t

quartz basalt
#

a and b would be what sorry?

glossy scroll
#

its just a math thing

glossy venture
#
Vector end;
Vector start;
Vector dir = end.subtract(start);
Vector one = dir.divide(dir.divide(time));
kind hatch
glossy scroll
glossy scroll
glossy venture
#

yeah i just like writing shit so

glossy scroll
#

you have two vectors that use a-b

#
  1. that's unnecessary in almost all cases
  2. you divide them, which just gives you 1
glossy venture
#

doesnt the client already interpolate positions

glossy scroll
#

yes, the client already lerps teleports that are less than 8 blocks

#

thats the purpose of the move packet haha

glossy venture
#

yeah

quartz basalt
#

thanks for the help but with the method you sent orb (time) needs to be a vector so that wouldnt rly work and Vector onePercent = endCenter.subtract(startCenter).multiply(1d / time); // get the value for linear motion would work already no?

glossy scroll
#

.divide is the same thing as .multiply(1/t)

quartz basalt
#

ah

glossy scroll
#

time is not a vector

#

its a scalar

glossy venture
#

could make it a vector, that would be interesting
some components move faster than others

quartz basalt
#

i cant put a double or numbers in the (time) part its asking for a vector

glossy scroll
#

oh i see

#

youre right

#

i see what you meant

#

also instead of 1d you could use 1.0

#

in my opinion it looks cleaner but honestly thats just a nitpick personal thing

quartz basalt
#
        Vector endCenter = loc.toVector();
        Vector startCenter = centerLocation.get(name).toVector(); // get the center of the current platform
        Vector direction = endCenter.subtract(startCenter);
        Vector onePercent = endCenter.subtract(startCenter).multiply(1d / time); // get the value for linear motion
        for (int i = 0; i < fallingBlocks.get(name).size(); i++) {
            FallingBlock block = fallingBlocks.get(name).get(i); // get the fallingblock entity

            new BukkitRunnable() {
                int iterations = 0;

                @Override
                public void run() {

                    block.teleport(block.getLocation().add(direction.subtract(onePercent).divide((direction.subtract(onePercent).multiply(1/time)))));
                    iterations++;
                    if (iterations >= time) {
                        block.teleport(block.getLocation().add(0.5, 0, 0.5));
                        this.cancel();
                    }
                }
            }.runTaskTimer(XKits.getInstance(), 0, 1);
        }
    }``` does the same thing as before, it kinda just shoots off above my head and then goes out of my render distance
glossy scroll
#

you're not really understanding

#

direction.subtract(onePercent) this is entirely not necessary

#

direction.subtract(onePercent).divide((direction.subtract(onePercent).multiply(1/time)

quartz basalt
#

oh i thought it was the equation you sent?

glossy scroll
#

all of that

#

is completely

glossy scroll
#

i was telling you the equation you currently had

#

and how it was completely wrong

quartz basalt
#

ohhh mb

#

i have it to make it move in a linear way so it looks smooth

glossy scroll
#

Vector onePercent = endCenter.subtract(startCenter).multiply(1d / time);

#

THAT is the vector

#

you need to use

glossy scroll
quartz basalt
#

oh alright my bad sorry

#

oh?

glossy scroll
#

that equation is what you had

#

im telling you

#

that equation

#

is equal to t

glossy scroll
quartz basalt
#

then i just add it to the location?

glossy scroll
#

yes

#

Vector direction = endCenter.subtract(startCenter); this is obsolete

quartz basalt
#
Vector endCenter = loc.toVector();
        Vector startCenter = centerLocation.get(name).toVector(); // get the center of the current platform
        Vector direction = endCenter.subtract(startCenter);
        Vector onePercent = endCenter.subtract(startCenter).multiply(1d / time); // get the value for linear motion
        for (int i = 0; i < fallingBlocks.get(name).size(); i++) {
            FallingBlock block = fallingBlocks.get(name).get(i); // get the fallingblock entity

            new BukkitRunnable() {
                int iterations = 0;

                @Override
                public void run() {

                    block.teleport(block.getLocation().add(onePercent));
                    iterations++;
                    if (iterations >= time) {
                        block.teleport(block.getLocation().add(0.5, 0, 0.5));
                        this.cancel();
                    }
                }
            }.runTaskTimer(XKits.getInstance(), 0, 1);
        }``` same issue as before the platform just goes away
glossy scroll
#

you could simplify your for loop to have a foreach loop

quartz basalt
#

yeah i had that before but i thought that couldve been the issue

glossy scroll
#

for (FallingBlock block : fallingBlocks.get(name)) {}

#

once again

#

please use java annotation if you're gonna usediscord markdown

quartz basalt
#

sorry forgot

glossy scroll
#

it's because of this

#

Vector direction = endCenter.subtract(startCenter);

#

get rid of it

quartz basalt
#

i removed it but it had no usage

glossy scroll
#

wdym

quartz basalt
#

it wasnt used

glossy scroll
#

well im saying it likely didnt work because of that line

#

endCenter was just mutated before you use it

#

did you run the code without that?

quartz basalt
#

i removed it and the same issue

glossy scroll
#

you sure?

#

send the code again

#

whole method

quartz basalt
#
// public static void moveBlocks(String name, Location loc, double time) {
        Vector endCenter = loc.toVector();
        Vector startCenter = centerLocation.get(name).toVector(); // get the center of the current platform
        Vector onePercent = endCenter.subtract(startCenter).multiply(1d / time); // get the value for linear motion

        for (FallingBlock block : fallingBlocks.get(name)) {
            new BukkitRunnable() {
                int iterations = 0;

                @Override
                public void run() {

                    block.teleport(block.getLocation().add(onePercent));
                    iterations++;
                    if (iterations >= time) {
                        block.teleport(block.getLocation().add(0.5, 0, 0.5));
                        this.cancel();
                    }
                }
            }.runTaskTimer(XKits.getInstance(), 0, 1);
        }
    }```
glossy scroll
#
public static void moveBlocks(String name, Location loc, double time) {
        Vector endCenter = loc.toVector();
        Vector startCenter = centerLocation.get(name).toVector(); // get the center of the current platform
        Vector onePercent = endCenter.subtract(startCenter).multiply(1d / time); // get the value for linear motion

        for (FallingBlock block : fallingBlocks.get(name)) {
            new BukkitRunnable() {
                int iterations = 0;

                @Override
                public void run() {

                    block.teleport(block.getLocation().add(onePercent));
                    iterations++;
                    if (iterations >= time) {
                        block.teleport(block.getLocation().add(0.5, 0, 0.5));
                        this.cancel();
                    }
                }
            }.runTaskTimer(XKits.getInstance(), 0, 1);
        }
    }```
west scarab
#

how would i convert 1000 to k and like 123456 to 123.45k?

glossy scroll
#

google

#

took me 15 seconds

west scarab
#

how did i not find that

#

i scrolled for like an hour

shrewd furnace
#

um

#

can someone help me figure out what this error is and how to fix it O_O

quartz basalt
shrewd furnace
#

thanks broski

glossy scroll
#

@quartz basalt i would try debugging again

#

and make sure you run that version of the code on a server restart

#

at this point i think its something else

quartz basalt
#

oh my it worked tysm ive literally spent about 6 hrs trying to figure it out

tardy delta
#

what the best way to loop over all players and skip yourself?

kind hatch
#

Create a copy of online players and remove yourself before you iterate.

tardy delta
#

i mean cant you just obtain a copy of the onlineplayers, remove yourself and loop over it?

#

ah

#

great

kind hatch
#

I don't really know if there is a simpler way to do that.

tardy delta
#

i was doing an if check the whole time and that looked kinda brr

kind hatch
#

You could add a check to see if it's you, but at that point you might as well just remove yourself.

tardy delta
#

Bukkit.getOnlinePlayers returns an immutable collection right? so not a copy which i can edit

kind hatch
#

Yep

tardy delta
#

meh

kind hatch
#
List<Player> players = new ArrayList<>(Bukkit.getServer().getOnlinePlayers());
tardy delta
#

mye

#

lets do a set as its only for looping

quartz basalt
iron glade
kind hatch
quaint mantle
quartz basalt
tardy delta
#

lmao

iron glade
#

I still have some plugins on bukkit paying me monthly

kind hatch
iron glade
#

The reward system on bukkit is kinda nice

quartz basalt
#

but thats what the onePercent does in my code its supose to do that 1sec

tardy delta
#

makes sense right

kind hatch
#

Then play with the number.

main dew
#

Hi how I can validate packet PacketPlayInUseItem?

quaint mantle
# tardy delta makes sense right
for (Player player : Bukkit.getOnlinePlayers()) {
    if (player == target || player.canSee(target)) continue;
    player.showPlayer(plugin, target);
}
#

no need for copy

tardy delta
#

mmh you could be right

#

i hope == works on player objects as acf gives me that player ยฏ_(ใƒ„)_/ยฏ

quaint mantle
#

it does

iron glade
#

== works

tardy delta
#

ah great ๐Ÿ’—

#

remaking my old vanish plugin smh

kind hatch
#

@quaint mantle Got a question about your ConfigFile class. I know there is the #dumbLoad() method, but I'm working with weird file paths. Currently I'm doing something like this.

File file = new File(plugin.getFileManager().getLocaleDirectory(), "locale_en.yml");
this.locale = new ConfigFile(file, YamlConfiguration.loadConfiguration(file));

I was wondering why there isn't a ConfigFile(File file) constructor that just calls YamlConfiguration#loadConfiguration(). Do you use the #dumbLoad method more frequently than not or am I just doing something wrong?

iron glade
#

I think CurseForge made a mistake LOL I ordered a $5 PayPal payout and somehow they sent me $50

quaint mantle
#

it just saves it if it doesnt exist

kind hatch
#

Ah, ok. Ty

tardy delta
#

wondering what the diff is

kind hatch
#

One takes a namespaced key.

tardy delta
#

i have one for accessing pdc

kind hatch
#

Presumably, you could use that to trigger bosssbar for other plugins.

golden turret
#

which class is responsible to kick the player for flying?

eternal night
#

ServerGamePacketListenerImpl

small current
#

i just done that in a vanish plugin

ornate patio
#

this baby horse is stuck here not knowing whether it should follow parent or drink water, as if rapidly switching between the two pathfinder goals

#
this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, false));
this.goalSelector.addGoal(2, new FleeFromHorse(this, 10.0F, 1.5D, 2.0D));
this.goalSelector.addGoal(3, new RunAroundLikeCrazyGoal(this, 1.2D));
this.goalSelector.addGoal(3, new PanicGoal(this, 1.2D));
this.goalSelector.addGoal(4, new HorseBreedGoal(this, 1.0D));
this.goalSelector.addGoal(6, new DrinkWaterGoal(this, 1.0D));
this.goalSelector.addGoal(7, new EatSeedsGoal(this, 1.2D));
this.goalSelector.addGoal(8, new FollowParentGoal(this, 1.0D));
this.goalSelector.addGoal(9, new WaterAvoidingRandomStrollGoal(this, 0.7D));
this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 6.0F));
this.goalSelector.addGoal(11, new RandomLookAroundGoal(this));
#

even though DrinkWaterGoal is a higher priority than FollowParentGoal

fossil eagle
#

Just curious, how do you guys debug your plugins? I have a test server to see if the plugin works but I'd like to be able to print things and stuff.

kind hatch
#

I normally sout.

fossil eagle
eternal night
#

Attach a debugger and love your life

wild reef
#

Hey guys, is there a way to check if I can trade with a villager? Basically if the trade inv gets opened when I click on him or if nothing happens, is there a way for that?

fossil eagle
#

I don't know which to use for Java.

#

I'm using Eclipse for my IDE.

modest garnet
#

is there a way to make it so intellij auto add "Database Manager" or my utils class etc without me having to do it manually

eternal night
#

IntellIJ xD

verbal dagger
#

really simple question how do i make a command where when i do /ping the server responds with pong!

fossil eagle
verbal dagger
#

im using Intellij

fossil eagle
#

Set up the command field and info in the plugin.yml

modest garnet
fossil eagle
#

Nvm lol

modest garnet
#

sorry haha

verbal dagger
#

lewi

fossil eagle
#

No its good, I have no idea what I'm on about anyways lmao

verbal dagger
#

thats not what i ment

#

it dosent respond your ping

modest garnet
#

what does it do

verbal dagger
#

i just says pong! back to you

#

when you do /ping

modest garnet
#

player.sendMessage("");

fossil eagle
#

storm

verbal dagger
#

?

fossil eagle
#

you have to set up a command field in the .yml file

#

and then you have to have an onCommand

verbal dagger
#

yeah thats what im doing

fossil eagle
#

which responds with pong

verbal dagger
#

oh

fossil eagle
#

send me what you got and ill take a look at it

modest garnet
# verbal dagger ?

do you mean like how to make a command from the start or just how to send the player a msg?

fossil eagle
#

Well you would have to make a command right?

verbal dagger
#

its becouse im making a /discord for a specific discord server so no nned for a config file

modest garnet
verbal dagger
#

@fossil eagle i started like coding yesterday soooo

#

no...

#

๐Ÿ˜…

fossil eagle
#

Ahh ok, well goodluck with everything

#

I have coding experience but just started plugins yesterday.

modest garnet
# wild reef Anyone got an idea?

would say the InventoryOpenEvent get the inventory type.
if the inv type is == to InventoryType.MERCHANT then u can do what u want.
not sure if thats what your after

wild reef
modest garnet
severe turret
#

this would be the class that contains the command

verbal dagger
#

um

#

thx

twilit roost
#

How to make ClickEvent run a method?

modest garnet
#

not the best idea to spoon feed them i cant lie they wont learn

modest garnet
#

not sure what u mean

severe turret
#

    @Override
    public void onEnable() {
        // Plugin startup logic

        getCommand("ping").setExecutor(new PingPongCommand());
    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }
}``` this would be the main class where you register your command
twilit roost
severe turret
#
version: '${project.version}'
main: dev.mono.pingpong.Pingpong
api-version: 1.19
commands:
  ping:
    description: Replies pong to player
    usage: /<command>
#

and then here you would register it in the plugin.yml

verbal dagger
#

thx soo much

severe turret
#

recommend you download Minecraft Dev plugin on Intellij marketplace

verbal dagger
#

already did

#

๐Ÿ˜„

modest garnet
# verbal dagger thx soo much

as much as your thankful i would really try do this yourself with other commands as you'll use this a lot and just copying a pasting is not a way to learn

severe turret
#

I'd stay away from making plugins

#

and learn java by itself

#

or try to resolve issues in github repos for minecraft plugins

#

if you have no idea how oop works you will struggle

verbal dagger
#

bukkit is down rn hard to find guthub repos

severe turret
#

You should learn Java first, atleast the basics

river oracle
modest garnet
severe turret
#

I don't talk to Maven enjoyers

river oracle
echo basalt
#

edgy mf lookin ass

severe turret
#

Gradle for life

river oracle
#

Gradle belongs in the dump becuase I don't like it therefore it sucks

severe turret
#

maven mfs when they implement a dependency and it actually imports it for the first time

#

(never happened before)

river oracle
#

It happens every time

#

Weird

severe turret
#

Gradle is life

modest garnet
#

eww gradle

severe turret
#

dont have to deal with ugly xml too

river oracle
#

Must be a glitch in the system wait are you the guy who was ranting about maven yesterday

severe turret
#

yes

modest garnet
#

1st Spoon feeding
2nd gradle

it gets worse

severe turret
#

I hate maven

river oracle
#

There's no getting to him he's too far into gradle

modest garnet
#

haha

severe turret
#

I don't like gradle either

#

but maven is too terrible

#

always use gradle for personal projects

river oracle
#

Quit java code in rust exclusively

severe turret
#

cant wait

#

cargo ๐Ÿ˜ณ

river oracle
#

Cargo is good

quaint mantle
#

Cargo is god

eternal night
#

I do love myself a full source compilation ๐Ÿ™

mortal hare
#

i wonder what's more performant for enum conversions? enum map or switch case?

#

gradle is good

#

it supports many DSL's

#

and multiple programming langs

#

i use groovy dsl, but I've seen people use Kotlin DSL too (paper devs)

#

it just takes time to get hang of it

river oracle
#

Rust

eternal night
#

javascript

river oracle
quaint mantle
#

^ shit

river oracle
#

(Horrible shit)

eternal night
#

sorry, python

river oracle
#

Acceptable compares to js

quaint mantle
#

python > javascript

#

java > python

river oracle
#

Rust > all

mortal hare
#

cmon im asking an normal question

quaint mantle
#

true

eternal night
#

go > rust

#

๐Ÿ‘€

quaint mantle
#

Fuck no

#

leave

eternal night
quaint mantle
#

๐Ÿšช

eternal night
#

tho tbf, rust syntax is pretty meh

river oracle
#

I used golang in the past it's not bad but I prefer rusts language structure

quaint mantle
river oracle
#

Enums are nice the fact they have interfaces are nice

quaint mantle
#

no offense

river oracle
#

He uses paper what do you expect

quaint mantle
#

true

eternal night
quaint mantle
#

people are shooting fireworks already bro

#

its 4:27PM

eternal night
#

oh

mortal hare
#

i forgot its 4th of july

eternal night
#

today is july 4th

#

yea

mortal hare
#

im not US citizen so

#

its a day of nothing happening today

eternal night
#

who is

river oracle
#

USA fuck yea

#

I love america

eternal night
#

being a US citizen ist kinda cringe kappa

river oracle
#

I love the US so much can't wait to leave

quaint mantle
#

๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ

eternal night
#

most #general convo in days

quaint mantle
#

Integer.MAX_VALUE

eternal night
#

Paper has API to lock campfire slots ๐Ÿ™‚

river oracle
#

Get out of here

quaint mantle
#

?kick

undone axleBOT
quaint mantle
#

wtf

#

bad api

river oracle
#

Short ๐Ÿ’€

eternal night
#

that is such a surprise omg

#

bad spigot api ?!??!

#

impossible