#help-development

1 messages · Page 1263 of 1

silent slate
#

yeah, but a simple test doing teams, its not working

#

if i create ".Owner" and "Admin" the owner group sits below admin

chrome beacon
#

Try not using .

#

Use 0

silent slate
#

wait imma try

#

yeah still

slender elbow
#

have you tried Player#setPlayerListOrder(int)

silent slate
#

what, that exists?

chrome beacon
#

yeah

silent slate
#

hail nah

#

ive not known that

chrome beacon
#

TIL

slow charm
#

How do I put in an anti-xray?

chrome beacon
silent slate
#

did setPlayerListOrder get added in 1.21.5? its not available for me in code

#

yeah prob

slender elbow
#

1.21.2

#

you can't seriously be writing code and running specifically 1.21, lol

worthy yarrow
#

You can check stash to see mc’s impl for perlin I forgot what it’s under tho

silent slate
obtuse roost
sly topaz
slender elbow
#

wdym

sly topaz
#

that there's enough changes/additions on each minor release now that it's more justifiable to not be running the latest minor version, though I'd still hope people upgrade sooner or later

worthy yarrow
slender elbow
#

oh for sure

obtuse roost
desert aspen
#

i lost my java project, and i only have the jar of the project, how could i recover it using that

weak wasp
#

And in future you might want to compile your plugin with source code included, that way you will just have your source in the jar and won't need to decompile...

kind hatch
#

Or upload it to GitHub or GitLab for backups

weak wasp
#

That too

#

I've had to decompile my plugins so many times. I have source on GitHub now, but it's v2.1 and that plugin on Spigot is v2.2. Going to have to decompile again if I ever plan on updating it.

desert aspen
weak wasp
desert aspen
#

alr

#

thaniks

#

i was finishing my plugin so i was scared asf

weak wasp
#

Scared you lost your code?

desert aspen
clever zephyr
desert aspen
weak wasp
#

Not everything decompiles perfect but it gets the job done

clever zephyr
#

just upload it on github as a private repo

desert aspen
desert aspen
weak wasp
#

For example Int.Maxvalue translates to literally 2147483647

clever zephyr
#

I mean , difficulty changes should be based on POJOs

#

you can make a system where DifficultyAdapter is a simple object with constructor values, these values determine the difficulty in your survival difficulty processing algorithm

#

unless your adapter is pretty complex

weak wasp
#

What is a POJO?

clever zephyr
chrome beacon
#

Plain old java object

weak wasp
#

Gotcha...

clever zephyr
#

I rarely overengineer my projects, unless there's no other way to achieve what i have in mind lol

#

I have only 1 public project that i have over engineered , which is kinda good for my portfolio

kindred sentinel
#

If I'm trying to get field that is not available in config, what value will it give?

weak wasp
#

I try not to over engineer, but then I end up doing so trying to handle all these edge cases.

kindred sentinel
clever zephyr
#

if that happens it will throw an NPE

kindred sentinel
#

Okay thanks

chrome beacon
#

I mean it depends really

#

getInt won't return null

#

it will return 0

#

You should see the javadoc for the methods you're using

clever zephyr
#

im pretty sure any other return value would return null

chrome beacon
#

If you use the get method that returns an object it will first return the default if set

#

and then null if not set, yes

kind coral
#

is it me or spigot-api 1.8 can't be used because its also resolving bungee-chat for that version which has been deleted or moved

#

nvm my bad it just needed sonatype lol

torn shuttle
#

ok one last try

#

and then I give up on this

buoyant viper
remote swallow
#

Give up

#

Never never give up

#

Double negative bosh

buoyant viper
desert aspen
#

how do i use build tools to get spigot api

sullen marlin
#

java -jar BuildTools.jar

#

or just use maven repo for the api

weak wasp
#

I have no idea how people are going to figure out running a server if they can't figure out buildtools

desert aspen
#

i think

#

bc i put it on the plugin and doesnt let me do any bukkit related things

weak wasp
#

You need to use the spigot-api.jar for your plugins, or do like md_5 said and set up maven.

#

I think it's in Spigot\Spigot-API\target\

#

Shaded jar has more features, like Gson and others...

desert aspen
#

1.21.4 uses jre 17 right?

kind hatch
#

Java 21

desert aspen
#

https://imgur.com/a/a7JLqhzo idk what im doing bad when puttin spigot api on build path, but every related to bukkit its error, what should i so

chrome beacon
#

Make sure Intellij is up to date

#

Also that link is broken

desert aspen
#

ill send anothe

buoyant viper
#

god imgur is so Shit nowadays

kind hatch
#

I got the same thing. :p
Lightshot uploads ftw rn

desert aspen
#

what other website should i use

buoyant viper
#

idk

#

lightshot?

merry basalt
#

Hello! I am looking for a developer who is willing to work longterm for our medieval minecraft server. Your duties will require working on items like playerskills, abilities, and races that will be mainly used for combat and pvp on our server. We work using Model Engine, Mythic Mobs, Oraxen, Mythic dungeons, and other affiliated plugins.

worldly ice
#

?services

undone axleBOT
rapid whale
mortal vortex
echo basalt
#

since when is itemframe rotation based off yaw and pitch on 1.8

#

I've been blaming retrooper for like 2 weeks

#

I did recall testing something like this forever ago

#

and apparently it's pitch based and not yaw based

#

unless retrooper's scamming me

blazing ocean
#

lmao

#

@alpine urchin are you a scammer

echo basalt
#

sup rad

#

did you see skrillex' ultra set

#

proper banger

blazing ocean
#

didn't

echo basalt
#

go see it

#

some unreleased peekaboo tracks too

#

(see around 45:50 mark)

blazing ocean
#

fire

sly topaz
#

it's a thing, apparently

echo basalt
#

it took me like 2 weeks of just slacking off

#

to remember that

#

because when I tried I think around 1.16.5 it worked

#

I thought it was packetevents

sly topaz
#

it started using the data in 1.17 as per that PR states, so fairly recently

echo basalt
#

so I did this

#

and it didn't work until I passed that yaw value

#

but in retrooper's case I need to pass it as pitch

#

scam

#

this will def break on like 1.9 but I'm not bothered

sly topaz
#

just fix it if someone ever reports it kek

blazing ocean
#

are you still doing that one map image commission you showed me ages ago

echo basalt
#

guy wanted 1.8 support

#

I delivered it like forever ago but I've been pushing this

sly topaz
#

are they not using viabackwards

#

it should solve it for you lol

echo basalt
#

no I believe he's running native

#

bruh wtf is this ad server he gave me

blazing ocean
#

😭

sly topaz
#

like server displaying ads in games

drowsy helm
#

so wouldn't be surprised

quaint mantle
#

Rent cannot be this high 🥀

mellow edge
dawn flower
#

weird request but can i make a specific enchanting table be max level without adding more bookshelves?

#

i got this design but it's only 22 rn, and i can't think of any other design

sly topaz
dawn flower
#

i want it to be level 30 with code but on the outside i don't need to add more bookshelves

wet breach
sly topaz
#

I at least don't think I've ever seen that done before

#

unless it is like, an ad for an affiliate hosting or something

#

@quaint mantle what's with the ghost reactions

wet breach
#

you can even open external links with the client

sly topaz
#

I just imagine someone freezing a player in waiting lobbies and force them to watch ads on a map lmao

wet breach
#

however pay per click doesn't pay all that well though and really you are wanting the conversion instead

#

conversion pay is significantly higher and its when someone clicks your link and also signs up

blazing ocean
#

with an interesting choice of emojis too

sly topaz
#

they've reacted to two of mine with a ghost so I just assume it is a bot

blazing ocean
#

zero messages too

sly topaz
dawn flower
sly topaz
#

I was under the impression it did it whenever a bookshelf was placed but turns out it does every time the inventory opens

shadow night
#

profit

weary sphinx
#

Hi, What's the best way to spawn holograms on all chests in a world?

young knoll
#

Probably on chunk load

#

I believe you can get all tile entities in that chunk inside that event

weary sphinx
#
public void spawnHoloInWorld(World world) {
    for (Chunk chunk : world.getLoadedChunks()) {
      for (BlockState state : chunk.getTileEntities()) {
        if (state instanceof Chest) {
          Location chestLoc = state.getLocation();
          spawnHologram(chestLoc, "Test Hologram");
        }
      }
    }
  }```

I'm doing it this way but it seems really inefficient
young knoll
#

ChunkLoadEvent

weary sphinx
#

okay, can it cause lag under high player counts?

young knoll
#

Anything can cause lag under high player counts

weary sphinx
#

I was looking to squeeze out some extra performance

young knoll
#

I mean, it shouldn't be too bad

worthy yarrow
weary sphinx
#
 @EventHandler
  public void onChunkLoad(ChunkLoadEvent event) {
    Chunk chunk = event.getChunk();

    for (BlockState state : chunk.getTileEntities()) {
      if (state instanceof Chest) {
        Location chestLoc = state.getLocation();
        hologramManager.spawnHologram(chestLoc, "&aTest Hologram!");
      }
    }
  }```

 ```java
 public void spawnHologram(Location location, String text) {
    if (holograms.containsKey(location)) return;

    Location holoLoc = location.clone().add(0.5, 1.5, 0.5);
    ArmorStand stand = (ArmorStand) location.getWorld().spawnEntity(holoLoc, EntityType.ARMOR_STAND);

    stand.setVisible(false);
    stand.setGravity(false);
    stand.setCustomName(text);
    stand.setCustomNameVisible(true);
    stand.setMarker(true);

    holograms.put(location, stand);
  }```

This looks good?
chrome beacon
worthy yarrow
#

You can use display entities 1.19+ btw

chrome beacon
#

That will sure it's modified before being spawned

weary sphinx
weary sphinx
#

haha, I like DisplayEntities btw makes life so much easier

smoky anchor
worthy yarrow
#

Kidding ofc, I mean it’s not a bad thing just don’t expect many to help all that much here… we hate on outdated software but for good reasons I assure you

worthy yarrow
# weary sphinx I see

Same thing applies to display entities, but whatever your case should still modify with the consumer

weary sphinx
chrome beacon
#

That doesn't explain why 1.8

smoky anchor
#

I'm asking "why 1.8"

#

Better not be "PvP"

weary sphinx
#

cuz the server is on 1.8

weary sphinx
chrome beacon
#

and why is that

smoky anchor
#

1.8 pvp can be replicated fairly accurately with data components on items
Yes, stuff will be different like swim, sneak, hitbox size. But better than being on decade old version

#

?howold 1.8.9

undone axleBOT
weary sphinx
quaint mantle
#

Use 1.8 if you want torture

smoky anchor
#

If you're working for someone then it's understanable a bit

worthy yarrow
smoky anchor
#

Yep

blazing ocean
worthy yarrow
sly topaz
#

it's just like using a different platform, it isn't bad or wrong to do, just different. While there's always the ongoing joke about how people should update and stop using 10 year old software, it's no more than a recommendation, if they want to stick to whatever versions they want, then that's fine. I'd understand more if this was a certain competing platform's discord were they explicitly forbid help for older versions but that isn't really the case here

blazing ocean
weary sphinx
#

that's the problem of people who use it

sly topaz
orchid gazelle
sly topaz
#

besides, it isn't like there haven't been attempts at modernizing older software, there's forks out there which bring new API to older versions where possible

orchid gazelle
#

There are things in older versions that are just more appealing for a lot of people

weary sphinx
#

mb I didn't read the rules

orchid gazelle
#

For example I find modern modded mc to be completely boring, but 1.7.10 - 1.12.2 completely amazing

sly topaz
#

it's fine

#

paid fork 🤮

weary sphinx
#

Oh its paid

#

30 euro wtf

sly topaz
#

there was a free one out there, I don't remember the name tho

#

it's the first result when you search spigot 1.8.8 fork anyway lol

weary sphinx
#

The goat

#

bro there are so many

jagged thicket
amber dawn
#

Hi im trying to make a fake player appear in the tablist, how can i do that? im pretty new with packets... some suggested PacketPlayOutPlayerInfo but I don't know how to implement NMS, I'm using Maven btw

#

is there a good documentation about this

chrome beacon
#

No it's NMS

#

so you're mostly on you're own

#

You can look at mappings and the protocol wiki

#

but other than that take a look at how it's used in nms and do that

#

?nms

chrome beacon
#

?mappings

undone axleBOT
chrome beacon
#

?protocol

undone axleBOT
amber dawn
#

thanks, i can already feel that it will be a pain in the ass

chrome beacon
#

yeah if you've never worked with it before

pure dagger
#

how to make an action happen every week at the same time? like friday 8 pm

sly topaz
#

it has an API

amber dawn
pure dagger
#

idk but you click tab to see it

amber dawn
#

oh yeah i've found it

pure dagger
#

by default

sly topaz
pure dagger
#

oh

amber dawn
pure dagger
#

sorry

sonic wolf
#

Hello everyone, I would like to know what is the best NPC plugin for Minecraft in 1.9 if you have any advice.

sly topaz
#

that said, probably Citizens. Or if you want a library then Lib's Disguises

sonic wolf
#

thanks you very much 🙏

snow stone
#

Hey, does anyone know of a good weapon or gun plugin for Minecraft? Looking for something that adds guns with custom features like reloading and aiming mechanics. Any recommendations?

#

currently using 1.8.9 right now

quaint mantle
#

Crackshot is pretty good iirc

snow stone
#

Any recommendations?

#

i love this kind of texture pack

quaint mantle
#

QualityArmory

quaint mantle
austere cove
#

bois halp i added fawe as maven dependency and it builds but my IDE does not recognize the imports 💀

blazing ocean
#

try invalidating caches

#

file -> invalidate caches

umbral ridge
#

is there a guide on custom events? eg how to create one? and use it in other plugins

#

as an api

#

eg.: i've made a permissions plugin and i want something like PlayerChangeGroupEvent

#

with custom parameters

austere cove
#

create a class extending event

#

add a static getHandlerList()

austere cove
umbral ridge
#

ty

blazing ocean
austere cove
#

ah it didnt point to the correct maven config

#

its been a while since ive worked with a bs language

blazing ocean
#

yeah xml does suck

umbral ridge
#

do you have to always call new? is that a bad thing?

blazing ocean
#

y-yes you have to create an instance of your class...

umbral ridge
austere cove
#

its been a while 💀
do I have to batch block changes myself or how do I let fawe handle it

echo basalt
#

setBlocks(pattern, mask)

#

sumn like that

vague swallow
#

Does anyone know a good guide/tutorial for custom world with the plugin?

blazing ocean
#

WorldCreator

austere cove
# echo basalt setBlocks(pattern, mask)

ja but im wondering if I can say change 100M blocks in one edit session and have it be batched by FAWE to not overload the server, or if I have to manually flush 100 1M block edit sessions.

#

also if working with FAWE can I build the edit session and call EditSession#flushQueue() async and can I keep reusing the same edit session.

blazing ocean
#

You can do it in one batch asynchronously just fine

still jacinth
#

Is there a specific way i'm supposed to store NamespacedKey(s) so that I can access them later on?
For example consider this class (a subclass of my plugin's "main")

    final class PDCLocationKey {
        public final NamespacedKey ITEMSTACK_ITEMKEY_STORAGE;
        public final NamespacedKey ITEMSTACK_UID_STORAGE;

        PDCLocationKey(final @NotNull FoxutilsItems plugin) {
            ITEMSTACK_ITEMKEY_STORAGE = new NamespacedKey(plugin, "fox_item");
            ITEMSTACK_UID_STORAGE = new NamespacedKey(plugin, "item_uid_storage");
        }
    }

and then

    public PDCLocationKey pdcLocationKey;

    @Override
    public void onEnable() {
        pdcLocationKey = new PDCLocationKey(this);
        ....
    }

This was the best way I could think of doing this , but then I run into an issue when trying to access it later on, where I either need to grab it by the plugin's name from Bukkit which seems jank, or store a static instance ( x#getInstance() ) which seems to be frowned upon

#
        {
            final PersistentDataContainer persistentDataContainer = itemMeta.getPersistentDataContainer();
            final PDCLocationKey pdcLocationKey = FoxutilsItems.getInstance().pdcLocationKey;
            // Stores the item class's itemKey (The key that identifies the created
            // ItemStack as an ItemStack of whatever Item-class (template)) at the foxutils-items:fox_item location
            persistentDataContainer.set(pdcLocationKey.ITEMSTACK_ITEMKEY_STORAGE, PersistentDataType.STRING, key.toString());
            persistentDataContainer.set(pdcLocationKey.ITEMSTACK_UID_STORAGE, PersistentDataType.STRING, UUID.randomUUID().toString());
        }
#

(how I am currently accessing it)

young void
young void
#

especially if its with the premium addons

young void
kindred sentinel
#

Is there any good example of making good command TabCompleter?

amber dawn
#

Can i also ask about ProtocolLib?

grim hound
#

packetevents

#

under no condition should pl be used

blazing ocean
#

legacy

amber dawn
#

Can packetevents be used also to create fake players on tablists

grim hound
#

rewrite it

blazing ocean
#

yes it can

grim hound
amber dawn
#

i'll try

#

the dependency threw an error, it can't find the artifact

blazing ocean
amber dawn
#

yeah i've taken it from the same website

blazing ocean
#

and did you replace PLATFORM with your platform

amber dawn
#

do i need to change the "-PLATFORM"

#

yeah i did not

still jacinth
# still jacinth Is there a specific way i'm supposed to store NamespacedKey(s) so that I can acc...
    public final class PDCLocationKey {
        public static NamespacedKey ITEMSTACK_ITEMKEY_STORAGE;
        public static NamespacedKey ITEMSTACK_UID_STORAGE;

        private static boolean keysInitialized = false;

        static final void initializeKeys(final @NotNull FoxutilsItems plugin) {
            if (keysInitialized)
                return;

            ITEMSTACK_ITEMKEY_STORAGE = new NamespacedKey(plugin, "fox_item");
            ITEMSTACK_UID_STORAGE = new NamespacedKey(plugin, "item_uid_storage");
            keysInitialized = true;
        }

        private PDCLocationKey() {
        }
    }

¯_(ツ)_/¯ man im clueless

#

is this considered static abuse? i guess i just need a better definition of it

blazing ocean
#

that's not static abuse no

still jacinth
blazing ocean
#

this

still jacinth
austere cove
#

How do I discard a fawe edit session before flushing

buoyant viper
#

do any ASM nerds know if i still need to call super.visitCode() if im using a MethodVisitor and effectively replacing the Method body

#

right now i override visitCode and just call visitInsn(RETURN) in it and it works, but it feels wrong

barren sparrow
#

im new to plugin dev

#

how to add the pop up text when u hover over a chat message

mortal vortex
#

When you override visitMethod(), you should return the original method visitor (super.visitMethod()) for methods you don't want to modify. For methods you do want to modify, you should wrap that original visitor. Looks like your code is returning null for methods that don't match

mortal vortex
buoyant viper
mortal vortex
#

Oh nah you’re good then bro

#

Also didn’t check but are you using VisitEnd? Good practice

buoyant viper
#

i wasnt sure if i needed to use it since there was like an "order of how things are called"

dry hazel
#

I'd just use the tree api

buoyant viper
#

and there was a lot of stuff between visitCode and visitEnd i didnt want to get missed

buoyant viper
#

i was using it previously, but i wanted to see if i could shrink file size down bc of shaded deps

dry hazel
#

it's only a few classes

buoyant viper
#

yeah but it was like 50kb more

#

(im probably forgetting to use minimizeJar or something idk)

#

i got really anal last night about how large my final jar was lol

orchid gazelle
#

you got what?

buoyant viper
buoyant viper
#

that probably explains a lot

mortal vortex
#

you got this no matter what queen

buoyant viper
#

i mean it works in its current state

#

defunct by now since i think mojang updated their libraries across the board to use either newer or a patched log4j

#

but i like touching up old projects

clever zephyr
#

Guys i decided to do smth very evil

buoyant viper
#

u switched to Paper?

clever zephyr
buoyant viper
#

🙏🏻

clever zephyr
#

Well i like paper and i sometimes use it for clients that requires it

#

apart from that,

#

I decided to override bukkit's original command map

#

and integrate it with my command framework

buoyant viper
#

i almost asked why would a client require paper and then i realized u meant People, not the game itself

#

now make it work with Brigadier

clever zephyr
clever zephyr
buoyant viper
#

i mean bukkit commands dont natively work with brigadier iirc no

#

thats why uhhh commodore exists i think

clever zephyr
#

Technically, my command framework automatically integrates with brigadier of all mc versions

#

it even works on legacy versions like 1.8 (except that any ver below 1.13 doesnt integrate with brigadier)

buoyant viper
#

obv, game didnt ship with it khajiit

clever zephyr
#

Im gonna make it an option to override the whole server's command map

clever zephyr
#

Does anybody have an idea on how to erase all vanilla commands from the server?

chrome beacon
#

but why

mortal vortex
#

rip /gamemode, gamerule, etc

blazing ocean
#

a permission plugin

sullen marlin
#

More like a no permission plugin amirite

blazing ocean
#

true true

buoyant viper
slender elbow
#

minecraft.command.<command> 🙏

clever zephyr
#

I have found out they are handled by CraftServer class and part of it is handled by NMS internally too
I found out that bukkit has smth called VanillaCommandWrapper which extends bukkit command and wraps around its fields giving them the values of a vanilla cmd
The only way i can think of rn is to inject (somehow) an executable that removes the commands after they are being registered
(I discovered that vanilla commands are always registered again AFTER a plugin enables)

#

@quaint mantle if you're so smart, why don't you suggest a way to achieve this ?

#

other than creating a wrapper for the CraftServer obviously

young knoll
#

?kick @quaint mantle automated reactions

undone axleBOT
#

Done. That felt good.

dry hazel
#

"rage bait master" lmao

clever zephyr
young knoll
#

Welp guess @slender elbow is a bot too

#

Time to get the boot

desert aspen
#

https://imgur.com/a/uBrcrqf i dont know what i did wrong with the build path, but everything i put related to bukkit it shows as an error

undone axleBOT
buoyant viper
#

u usin maven or gradle?

#

if not, issue might be

#

?bootstrap

undone axleBOT
#

Bootstrap Jar
The main spigot-1.18.jar is now a bootstrap jar which contains all libraries. You cannot directly depend on this jar. You should depend on Spigot/Spigot-API/target/spigot-api-1.18-R0.1-SNAPSHOT-shaded.jar, or the entire contents of the bundler directory from your server, or use a dependency manager such as Maven or Gradle to handle this automatically.

Please read the release notes for further information: https://www.spigotmc.org/threads/9-years-of-spigotmc-spigot-bungeecord-1-18-1-18-1-release.534760/#post-4305163

clever zephyr
#

I don't see any build tool file

young knoll
#

That likely means they aren’t using one

clever zephyr
young knoll
#

That’s not what that means

clever zephyr
desert aspen
#

its on the build path

#

so i think im using it

young knoll
#

The default build system in eclipse is just ant

#

Iirc

#

You really should use maven or gradle thoufh

clever zephyr
#

Okay i found out that luckperms does it using CommandPreProcessEvent which i don't wanna end up using :((

blazing ocean
#

then just use luckperms??

clever zephyr
desert aspen
blazing ocean
#

luckperms has an API

blazing ocean
clever zephyr
blazing ocean
#

source: trust me bro

slender elbow
#

yes, and check what it does in there

clever zephyr
slender elbow
#

it only uses that for a single thing

#

no

#

it's for the /op command itself

clever zephyr
#

op and deop

slender elbow
#

which LP lets you disable op's entirely

#

it isn't for op commands

#

you can be deop + permission for, like, /tp

clever zephyr
#

I meant the /op and /deop

slender elbow
#

you were talking about "all vanilla commands"

blazing ocean
#

that implies other commands exist

#

we only have opping in this house

slender elbow
#

with LP just deny the permission for the commands, minecraft.command.<command> and you won't be able to run 'em

young knoll
#

What if I op myself by editing the ops file

#

Take that luckperms

slender elbow
#

fortunately LP can ignore op status if you so desire 😄

clever zephyr
# clever zephyr its for OP commands only

I meant "/op and /deop" here
I stated that luckperms has an option for disabling THESE commands, through the CommandPreProcessEvent
Again, I'm not planning on using LuckPerms since im working on a third party framework that is Public , not everyone uses LP
I desire to ignore all vanilla commands, which unfortunately have no other way around other than using CommandPreProcessEvent

young knoll
#

Will it stop me from getting my grubby hands on the operator items tab in creative

#

Ignore the fact that creative mode lets you do pretty much whatever

blazing ocean
#

genuinely have never seen a server not use it

young knoll
#

Can’t you just do what luckperms does

#

Which I assume is add a permission attachment

clever zephyr
#

I mean the project is a command framework.
it should be associated with commands not permissions.

clever zephyr
tall dragon
#

it has everything you could want for a permission plugin, its fast, intuitive to use. not much else any1 could want.

clever zephyr
#

are the messages configurable ?

tall dragon
#

of course

desert aspen
#

if i start to use maven as build tool when my project have a lot of things it will create errors?

earnest girder
#

Something in this code: https://paste.md-5.net/unagucebaf.cs (specifically inside the for loop, I checked by commenting it out)
causes this error: https://paste.md-5.net/axivojotux.php

and disconnects the player from the server

Caused by: io.netty.handler.codec.EncoderException: String too big (was 36 characters, max 16)
seems like there is a string that is too big for some reason, but I'm not sure what or why its an issue. I'm using strings for player UUIDs... Am I doing something wrong?

worthy yarrow
young knoll
#

I’m guessing you are trying to use offline players with names longer than 16 characters

young knoll
#

If you want to use a uuid, you have to convert it to a uuid first

#

UUID.fromString

clever zephyr
worthy yarrow
clever zephyr
#

I think you could make a verification check on the name if its even valid
@earnest girder

earnest girder
#

ok

clever zephyr
#

smth like

if(memberName.length() > 16) {
// ignore OR throw an exception as you wish
}
earnest girder
#

okay, thanks

#

I think im using the method getPlayer(name) and inputting a UUID as a string by mistake

clever zephyr
#

np
also if you're planning ignore just do
memberName.length() <= 16

drowsy helm
young knoll
drowsy helm
#

but yeah also defensive programming like Mqzen said

#

Also fully arbitrary but that could be a foreach loop

blazing ocean
worthy yarrow
clever zephyr
clever zephyr
worthy yarrow
#

Rad go to bed already btw

blazing ocean
#

are you wanting to delay my execution by 0.00001ns

blazing ocean
worthy yarrow
#

Melatonin

blazing ocean
#

don't have any

clever zephyr
tall dragon
blazing ocean
#

true

quaint mantle
drowsy helm
#

Foreach massages my brain

#

Easier for caveman brain to read

blazing ocean
tall dragon
#

haha

blazing ocean
clever zephyr
quaint mantle
#

String.format("%s", object);

clever zephyr
blazing ocean
#

that's just unnecessary

worthy yarrow
#

Rad did you fall out of your Harry Potter phase yet?

blazing ocean
#

spigot help-dev coming up with all possible ways to get the string representation of an object

blazing ocean
#

still working on that spells plugin

clever zephyr
worthy yarrow
#

Where’s the second kaboom then

blazing ocean
#

😔

#

you gotta make it first

worthy yarrow
#

Ok I’ll make it… in my mind then tell you what to do

umbral ridge
#

would tracking a specific WrittenBook be a pain in the ass? also.. can it be a virtual book? so that player doesn't actually get it in their inventory? I'm just trying to get some input, and when the book is closed, I want to read from it.

orchid trout
#

how do i download better internet

quaint mantle
#

Where do I download thread safe spigot

blazing ocean
#
orchid trout
umbral ridge
#

you want to answer my question now

#

XD

orchid trout
umbral ridge
orchid trout
#

is it geometry dash?

umbral ridge
#

its minecraft web version

tall dragon
orchid trout
#

i dont have a printer.

worthy yarrow
#

Well now how about a printer for your paper

umbral ridge
blazing ocean
#

how about a printer for your printer for your paper

umbral ridge
#

how about printer for your printer's paper

worthy yarrow
#

Twice printed paper

blazing ocean
#

how about not printing

umbral ridge
#

how the heck do you open a book but not store it in the players inventory

blazing ocean
#

isn't there like Player#openBook or sth

orchid trout
#

have you tried not opening the book?

blazing ocean
orchid trout
#

i love adventures

umbral ridge
#

kyori adventures?

orchid trout
#

the ones in the jungle

#

where a ball chases you

blazing ocean
orchid trout
blazing ocean
#

?

orchid trout
#

number platep

blazing ocean
#

???

orchid trout
#

JVN 063

drowsy helm
#

Agreed

earnest girder
#

if I'm allowing players to create a gang/faction with a name, and I save their gang to a file that stores the owner, members, and other info:

should I use an integer as a "gang ID"? Or should I use a string (the gang name) as the ID? Players wont be able to create two gangs with the same name.

Should I just use the name for keeping track of which gang a player is in/the name of the gang file, or should I create a new integer field?

young knoll
#

Why not use a UUID

earnest girder
#

well, thats extra data i have to store. I could just use the name as the UUID

#

right?

young knoll
#

What if they want to change the name

ivory sleet
#

The problem with int is ofc that its not very friendly if u expose that to end users

grand flint
#

which event triggers pressure plates

earnest girder
ivory sleet
young knoll
#

Ass-pressure™️

grand flint
#

tf is action

earnest girder
young knoll
#

You’ve never used Action.RIGHT_CLICK_AIR?

grand flint
#

nope

young knoll
#

Or LEFT_CLICK_BLOCK

grand flint
#

nope

earnest girder
# grand flint tf is action

intactions such as clicking blocks or air (or physically trampling crops or stepping on pressure plates) trigger PlayerInteractEvent, from there you can check which kind of action triggered it with Event.getAction

ivory sleet
thorn isle
#

randomly generated UUIDs will make everything generally easier if you need to adjust or expand your logic later

earnest girder
young knoll
#

Isn’t there a uuid version that includes the time

ivory sleet
#

Tho using numerical incremental ids is a common technique, tho usually u bind
NumId to UUID in a table and then u have another table with UUID to DataAttributes or somethinf

thorn isle
#

an ID is generally assumed to be immutable; if you use the name as the ID, and then you realize you want to allow players to change the gang name, you've painted yourself into a corner

ivory sleet
thorn isle
#

using a numerical incremental id is fine but it adds some extra complexity in having to somehow track the next available id

#

this is generally undesired redundancy and can easily be normalized in a sql table anyway, so it's scarcely worthwhile

earnest girder
ivory sleet
#

yea usually ur database is where those numerical ids stay

thorn isle
#

exhaustively enumerating every reference to the gang may not be easy or even viable

young knoll
#

Huh apparently java doesn’t have an api for making version 1 UUIDs

#

Sadge

thorn isle
#

suppose for example another plugin that uses your api to refer to some gang

#

how are you going to update the string they use as the id?

#

this is why id's are expected to be immutable

earnest girder
#

I'm using YAML files

previously I was generating a new int as the gang ID and using that as the file name, as well as the data field in each player (gang member)'s file

ivory sleet
#

whilst getting that immutability

#

And tbh, renaming gangs won’t happen very frequently right?

thorn isle
#

i'd avoid it out of principle but yeah name as id is doable as well, i just wouldn't recommend it

young knoll
#

Means you gotta create a new file and then yeet the old one to rename

#

Doable but just kinda meh

earnest girder
#

okay, no way to just rename a file from the plugin?

ivory sleet
#

^^ if u do pick strings, encapsulate those in a class and properly restrict instances of that class so u can’t have a name of some weird characters like tab chars, random ascii chars etc

ivory sleet
young knoll
#

Appears so

#

Files.move

ivory sleet
#

Ye

earnest girder
#

the tricky thing with using an int as the ID is that I have to map IDs to names

and when a player creates a new gang I have to figure out what the next int is based on the gangs that already exist

young knoll
#

That’s the nice part about uuids

#

You don’t have to find the “next” one

earnest girder
ivory sleet
#

If not, then yea, avoid numerical incremental ids, just a hassle for u

ivory sleet
young knoll
#

It’s very very unlikely for it to be a duplicate

earnest girder
#

yeah

ivory sleet
#

its just a very small chance to generate a duplicate

young knoll
#

But technically you can just add a check for that

ivory sleet
young knoll
#

If new file(ourNewUUID).exists() then buy lottery ticket

ivory sleet
#

or well, until we run out of space, only 64 bits

young knoll
#

Isn’t that in like 2038

earnest girder
#

okay, ima use a UUID

ivory sleet
tall dragon
#

i mean chance of duplicate uuid happening is like 1 in 5.3 × 10^15 on 1 trillion uuids

#

so pretty unlikely

young knoll
#

Ah wait no

#

2038 is for 32 bit

ivory sleet
#

128 bit w uuid, but if u do it with epoch time for the MSB its 64 bits

umbral ridge
#

what the heck

Caused by: java.lang.IllegalArgumentException: ItemStack Material (WRITABLE_BOOK) must be Material.WRITTEN_BOOK

thorn isle
#

doesn't uuidv4 use like a local timestamp and the mac address or something to make it unique down to the current millisecond and more or less unique to the machine? it's practically impossible to get a collision because of this, unless you generate millions of them per second on the same machine

ivory sleet
#

obv u can be freaky and use like 64+32 bits for epoch time

young knoll
#

Yeah with 64 bits we’re good for 290 billion years

thorn isle
#

i remember this being brought up at some point because the uuid's generated by like microsoft word allowed people to fingerprint the machine the document was written on, as they hashed the mac address or some hardware serial number

#

not sure if they're still used

#

tl;dr no you're not going to have a collision

young knoll
#

v4 is the pseudo random one

#

Now I’m curious what it uses

ivory sleet
#

secure random

#

just

#

Very slow

umbral ridge
#

does minecraft not have an api for editing an open book? without the need to place it in the player's inventory???

ivory sleet
#

^ (jisho)

umbral ridge
#

what

#

!!

ivory sleet
#

That’s basically client sided no?

thorn isle
#

Versions 1 and 6 (date-time and MAC address)

ivory sleet
#

Like when u edit a writable book on the client

thorn isle
#

okay nevermind, v4 is just random bits

ivory sleet
thorn isle
#

not out of the box i don't think

ivory sleet
#

fair then

earnest girder
#

this is a dumb question but can I store null in a YAML file?

with ints I was doing -1 for no gang, can I just store it as null if I switch to UUIDs?

young knoll
#

Version 7 also includes timestamp

cinder abyss
#

Hello, did someone made a utility class to compare minecraft versions that is robust ?
Like java Version.getActual().isPost("1.17.2")

or smth like that ?

umbral ridge
#

well that is weird... but with signs that's possible? you can put text in a virtual sign and then close it andread from it

thorn isle
#

yes, yaml allows nulls

earnest girder
#

thanks

thorn isle
#

iirc the tokens for it are ~ or just NULL

ivory sleet
#

I assume you have a bidirectional relationship @earnest girder

young knoll
#

Doesn’t spigots yml system just remove the key if you set it to null

ivory sleet
#

gangs contains members, each member has a gang

#

(From both types)

thorn isle
#

i don't remember, i don't think it does

ivory sleet
thorn isle
#

usually it's not desirable to discriminate between an absent mapping and a null mapping anyway

ivory sleet
#

w/o calling snakeyaml

young knoll
#

Yeah it removes the mapping

thorn isle
#

either way, when you do get for it later it returns null

earnest girder
ivory sleet
#

Tough not to use a relational database

clever zephyr
ivory sleet
# clever zephyr Mongo >>

Yeah but no, they kinda have different use cases if you really have to scale and need to care about that, with sql u can define nice invariants also on queries which is super useful when your data types start to have relationships

clever zephyr
ivory sleet
#

when the data you’re storing is unstructured

#

Obv you can still use nosql for relational data

#

Its just that its more bug prone and ur middleware now has to act on data invariants to hold at all times

echo basalt
#

nosql is nice for unordered stuff yeah

#

something like a grocery store is nice on sql because it's all "product" | "price" | "amount"

#

But something like bukkit's PDC system is inviable with sql

#

Unless you json it

young knoll
echo basalt
#

yaml

clever zephyr
#

Understandable
I'm still learning some advanced sql concepts like JOIN, UNION
There's a weird concept i still don't comprehend till now
The OneToMany and ManyToMany or ManyToOne

#

My brain goes brrrrrr when i try to understand them

weak wasp
#

Flatfiles

clever zephyr
ivory sleet
#

oh that’s basically the “why” to sql’s power mqzen, M-M, 1-M, M-1 and then ofc the normalization forms

#

its basically just object oriented, where each table is a class (i don’t know if its a good analogy?)

clever zephyr
#

just an ORM based concept i suppose ?

echo basalt
#

Yeah a DBMS thing

#

not even that just a general data association concept

ivory sleet
#

^

clever zephyr
#

Time to spend some months on mastering Hibernate

ivory sleet
#

Like creating a table where certain attributes (columns) are associated with other attributes (columns) from other tables

clever zephyr
#

Like how would i construct the idea

earnest girder
ivory sleet
#

For example like

#

A Human can own multiple pets

earnest girder
#

and converting the UUID to a string for use isnt a bad idea right

ivory sleet
#

A pet can only have one owner

young knoll
#

What if a couple owns the pet

ivory sleet
#

Im sure u know how to create this in code (Object oriented specifically)

clever zephyr
ivory sleet
#

but in sql, the only main difference is that we need to give pets and humans identifiers also

ivory sleet
#

Yea, ofc u could use mongo and just store an array of pet ids etc, but u may compromise on the invariants (for example the invariant could be that if a pet is deleted, then the owner no longer owns that pet), and then the only way to guarantee this invariant would be through ur middleware, java code as an example

ivory sleet
clever zephyr
#

so let's assume there are 2 tables, one for the pet-owners(humans) and one for all the pets owned by people
the pet-owners has the following columns:
ID | NAME

thats without doing that concept
but when we apply for example the One To Many concept
the pets table should be like this

PET_ID | PET_NAME | OWNER_ID

where the owner column has the ONE owner to that pet
and can have duplicate values SINCE one human can have multiple pets
while guranteeing that pet_id is unique

#

then maybe we can construct a relational column between "ID" in the pet-owners table and the "OWNER_ID" in the pets table

#

to load the rest of the human's data for constructing a human/player data object

ivory sleet
#

Yes so usually when you deal with one to many relationships iirc a common strategy is to define this relationship with a new, third table

clever zephyr
#

Okaaay, I think i began to understand it

ivory sleet
#

yea and then you can have a compound primary key

#

So for example let OwnerId | PetId serve as the unique key

clever zephyr
#

I should really practice this , its really interesting

clever zephyr
ivory sleet
#

Or sometimes you will have an id on the relation table itself so RelationId | OwnerId | PetId
(Underline = primary key [means unique also in this case])

#

and then the Pet table, as well as the Person table both refer to the relation id instead

hazy parrot
#

Why third table for 1-m?

ivory sleet
#

just as an example, there are different techniques to this, and there is this entire abstract relational algebra as well

clever zephyr
ivory sleet
#

@clever zephyr ^^

clever zephyr
ivory sleet
#

one to many for simple reasons is fine w just like
Human(Id)
Pet(Id, OwnerId references Human(Id))

#

yea

echo basalt
#

the way we learned this at school was with a supermarket supply chain

ivory sleet
#

Sounds like a good way to represent and solve it relationally tbh

echo basalt
#

each product can only have one brand

#

each brand can have multiple suppliers

#

each supplier can supply for multiple supermarkets

#

but each supermarket for one product can only have one supplier?

#

weird constraints

young knoll
#

I don’t think that’s how it works

echo basalt
#

yeah not that last one

clever zephyr
buoyant viper
#

my hs taught javascript one year

#

like at the very end

echo basalt
#

every kid in 10th grade has uh

#

computer class

#

and we learned how to use MS access on it

#

which is basically sql

ivory sleet
# clever zephyr Okayy, so a third table in m-m cases is basically to flatten down all the relate...

Well you also have stuff like inheritance in this kind of domain, for example
Post(PostId [primary key], SenderId)

ImagePost(PostId [foreign to Post(PostId)], Url)

TextPost(PostId [foreign to Post(PostId), Text)

so both TextPost and ImagePost inherits Post, ofc u can have one big fat table with nullable columns (attributes) but its bad cuz now u lose these invariants (conditions and relations that always have to be true)

#

also in the database world, we call tables for data schemes, i don’t know why but yea

#

annoying

buoyant viper
#

my actual comp sci course was VB and SQL and i think? Java near the end of it

clever zephyr
echo basalt
#

my course was also comp sci related which means we did python, php and C#

buoyant viper
#

i wish i remembered the SQL stuff but i havent had something ive made that needed to use it

echo basalt
#

and yeah we also did sql at the end

#

and nosql

#

mongo n shit

#

I skipped half my lessons I don't remember much

buoyant viper
#

i wish it was C#, i ended up teaching myself c# a couple years later anyway, and who the fuck uses VB in enterprise

ivory sleet
#

Ye vb is crazy

echo basalt
#

we also tinkered with arduinos

young knoll
#

We did SQL and then SQL: Oracle flavour

#

For some reason

echo basalt
#

around the end I realized my course was webdev oriented

#

and they released an iot focused course that actually does java

clever zephyr
echo basalt
#

and they want me to host a workshop next year

buoyant viper
#

i think we also did webdev in.. adobe dreamweaver?

ivory sleet
clever zephyr
# ivory sleet :,)

Bro the application cannot close automatically, you NEED TO SPECIFY THE CLOSE SCRIPT When the user clicks on the CLOSE BUTTON

#

OMG

buoyant viper
#

skill issue

clever zephyr
#

the most triggering shit ever

#

I hate that lang

buoyant viper
#

triggering (the Close event)

ivory sleet
#

Usually just an event no?

#

And then the app has to terminate gracefully by listening to that event

buoyant viper
#

its like a Close Request at most

#

fr

ivory sleet
#

i speaking in general ^^

clever zephyr
#

frrr

ivory sleet
#

That’s true

buoyant viper
#

idk man i write Swing guis

#

i already hate myself enough

clever zephyr
ivory sleet
#

😃

clever zephyr
#

Swing is wayyy better compared to VB

buoyant viper
#

never again

#

C# >

clever zephyr
#

Good for your mental health

buoyant viper
#

just plain old fuckin C# >>>

ivory sleet
#

is VB worse than like JavaScript or webserver PHP?

clever zephyr
#

PHP , idk i didn't use it much

ivory sleet
#

🥹

buoyant viper
#

now dogging on JS was just uncalled for

ivory sleet
#

Lol

buoyant viper
#

but yeah VB is just

clever zephyr
#

TypeScript >>

buoyant viper
#

theres no reason it needed to exist

clever zephyr
buoyant viper
#

its literally backed by C# IL bytecode iirc

#

like for all intents and purposes im 90% certain its a subset of C#

clever zephyr
#

@ivory sleet also, VB's access modifiers are so fucked up

#

their logic is weird

ivory sleet
#

😅

young knoll
#

C#? pfft I do programming not music

ivory sleet
#

F# then?

clever zephyr
young knoll
#

I did VB 6 back in highschool

ivory sleet
young knoll
#

Which is oddly fitting because VB 6 came out the same year I did

#

Out of the womb that is, not the closet

buoyant viper
ivory sleet
#

That’s kinda nice tho?

young knoll
#

I’d rather use C# tho

ivory sleet
#

I thought you were a musician

young knoll
#

VB may be in second place, but why bother with second place when you can use first place

clever zephyr
ivory sleet
#

tbh they used to back in the days when C# had just skidded entirety of Java

clever zephyr
#

Camel case >>

ivory sleet
#

then to avoid getting caught, they switched some stuff including those naming conventions (lore accurate 97%)

buoyant viper
#

my issue with C# is generics but its bc 1. theres no type erasure like in Java (iirc) and 2. im just kinda Stupid (skill issue)

ivory sleet
#

that’s fair

#

Type erasure works beautifully WHEN IT WORKS

young knoll
#

C# also forces you to prefix your interfaces with I

ivory sleet
#

erhmmm Haskell

buoyant viper
#

based

slender elbow
young knoll
#

Well, not forces, but visual studio will get angry with you

slender elbow
#

okay nvm

ivory sleet
young knoll
#

John Microsoft will come to your house

#

And burn it down

buoyant viper
young knoll
#

I mean it must be part of conventions then

#

You will I your interface and you will like it

buoyant viper
#

gonna write a Java compiler that enforces that

ivory sleet
#

🤨

young knoll
#

Make it enforce UpperCamelCase too

#

I totally don’t write methods in normal camelCase and then wind up with visual studio going “UwU I smell a naming rule violation this method must start with a capital :3”

ivory sleet
#

you would never

young knoll
#

It’s a habit!

empty comet
#

Hi; so I'm trying to code better (even if it's not really required because my plugins are small) and i'm currently trying to have a better solution for gui's, i'm an old-school getTitle person, but apparently it's been long-gone, but i found confusing answers on the forum (about getHolder mostly), so what's the "good" way to do simple gui's now?

young knoll
#

?gui

ivory sleet
#

Map<InventoryView,Blah>
Where Blah is additional menu data

clever zephyr
ivory sleet
#

and then u add the entry on inventory open, and u remove it on inventory close

clever zephyr
ivory sleet
#

oh yea that might work too

empty comet
#

i'll check those three out, thank you ! 👋

#

it does seems a lot compared to the old ways tho lmao x)

ivory sleet
#

old ways is basically inventory holder right?

clever zephyr
ivory sleet
#

or just map some inventory instance instead of inventory view

clever zephyr
empty comet
#

Honestly i always hid data i needed inside items data containers, so i just used getTitle, and that's it x)

ivory sleet
#

💀

empty comet
#

It's the worse way possible, but it worked (and it wasn't laggy)

young knoll
#

Flashback to that one anticheat

ivory sleet
#

Well tbh titles are like, doable, but its quite obvious what the issues are w them

ivory sleet
young knoll
#

Until someone renames a chest

clever zephyr
ivory sleet
#

It depends

young knoll
#

If the inventory never changes

#

There’s no reason to have one per player

ivory sleet
#

Static ones can save a lot of footprint

empty comet
young knoll
#

Of course the moment you want to update something based on the players permissions or whatnot, you probably want them seperate

clever zephyr
# ivory sleet It depends

From my personal experience , I have tried both approaches, an inventory per player is less error prone in all cases
Static ones are really prone to bugs when the inventories are changed alot yk
tbh in most use cases, the per player would win

ivory sleet
#

How are they bug prone

empty comet
ivory sleet
#

Like static ones are kinda like when u have a static web page and u render it server sidedly - once

clever zephyr
young knoll
#

That’s not static

clever zephyr
#

Oh wait you meant static inventory contents ?

#

or like the code design itself ?

young knoll
#

In my case I meant static contents

clever zephyr
ivory sleet
#

for example a set of menus to view online players

clever zephyr
eager crescent
#

Wait if I wanna find a dev where do I look?

ivory sleet
#

?services

undone axleBOT
eager crescent
#

oh bet

ivory sleet
#

and its not bug prone per say

#

maybe it was like back in some early snapshot version of some spigot/paper build

clever zephyr
#

You gave me a great update idea to my lib

ivory sleet
#

😅

clever zephyr
#

i will make a static menus API without the player context

#

saves performance for static inventories instead of always making them dynamic

ivory sleet
#

For example we have static menus for auction house pages, and we also pool it since usually some specific sides (like the first couple of pages) will tend to be opened by lots frequently

ivory sleet
ivory sleet
#

like the clicker

#

:P

clever zephyr
young knoll
#

I tend to always build my inventories when needed

#

Idk if it would be better to keep them in memory mapped to the owners uuids

clever zephyr
ivory sleet
#

Yea, well having a variety of cache policies can be nice

#

Like avoiding to rerender contents is always nice

#

but ofc, if its truly helping w performance by any significant means

clever zephyr
#

If you're free ofc

eager crescent
#

Am I allowed to talk abt it here

echo basalt
#

crzy

clever zephyr
#

no and no

eager crescent
#

shi mb then

clever zephyr
ivory sleet
#

For pagination, I assume you paginate over an indexed list of items?

eager crescent
#

ye idk cuz I Js joined

echo basalt
#

oo we're talking about menu libs

ivory sleet
#

Ye

echo basalt
#

gotta get some inspiration

empty comet
#

welp, after checking out everything, i am absolutely lost lmao, i'm too bad/dumb to understand anything

echo basalt
#

making mine w nms slots code's awful

#

doing it with an event-driven approach

empty comet
#

also it seems to be very complicated just to do 2/3 menu when the only thing that changes are some lore x)

echo basalt
#

menu.subscribe(MenuAction.CLICK_SLOT, (action) -> {
....
})

clever zephyr
#

i have 2 modes for pagination
one for automatic pages (dynamic pages)
one for manually made pages by the user.

ivory sleet
# clever zephyr yea i do

I like it, unsure if it scales well with lets say 10k items, let alone if u wna allow ascending, descending etc

eager crescent
#

well I’m not necessarily trying to learn, I’m just making a smp server like donutsmp but I need the dev for it and will pay too. I like my chances cuz I have a server w 5k members so I see potential

#

But ye delete my message if it’s not allowed

ivory sleet
#

But looks like u got it quite nice and fitting w the rest of the menu api

clever zephyr
young void
#

job announcement or something it was?

eager crescent
#

Where it at

ivory sleet
eager crescent
#

What do I search

echo basalt
#

?services

undone axleBOT
clever zephyr
young void
ivory sleet
clever zephyr
earnest girder
#

I have a custom respawn screen where players choose whether to spawn at their bed, their house, world spawn, etc.

On PlayerRespawnEvent, they are teleported to a dummy location and presented with the custom respawn GUI

The problem is that whether or not gamerule doImmediateRespawn is true, they always spawn at their bed spawnpoint and see themselves there for a split second before they are teleported and taken to the custom respawn screen

Is there a way to prevent this? Can I skip the automatic bed respawn entirely instead of teleporting them after the fact?

young void
earnest girder
#

ah lemme try

clever zephyr
echo basalt
#

I don't really like doing my menu filling stuff like that ngl

echo basalt
#

At least for my use-case menus should always be configurable

clever zephyr
young void
clever zephyr
#

best use case for the default-contents would be fancy panes for the pages

echo basalt
#

writing a nice API to hardcode menus is an approach but most customers actually like to mess around w the layout

ivory sleet
echo basalt
#

They always need to be configurable and flexible enough to do whatever you want

clever zephyr
echo basalt
#

currently rewriting my lib because the other business req I need is the ability to do per-slot logic

young void
echo basalt
#

Like this slot only accepts this item

#

and then it changes this slot to confirm it's inserted type shit

ivory sleet
#

Ah I see

echo basalt
#

I'm also considering adding menu animations

eager crescent
young knoll
#

Making the entire menu customizable sounds annoying

young void
echo basalt
#

It's not THAT crazy

young knoll
#

That’s a lot of information you’d have to provide

clever zephyr
ivory sleet
#

?kick 1266183754989305867 use ?services as aforementioned

undone axleBOT
#

Done. That felt good.

clever zephyr
young knoll
#

Item type, item amount, item name, item lore, all the various fancy item components, etc

clever zephyr
ivory sleet
young knoll
#

It’s possible to make anything configurable if you’re dedicated enough

ivory sleet
# young void f

well, Im sorry if I scared away ur customer, just not the place to be begging yk

eager crescent
#

yo

echo basalt
#

It doesn't need to be crazy crazy crazy

#

I just use an item builder that has like

#

config codecs as I call em

echo basalt
#

pair that with a mask + some hardcoded identifiers

#

and most menus get pretty basic

young knoll
#

Feck it, just implement jshell and let the user program the entire menu themself

echo basalt
#

Current (OLD 3+ year old) API