#server-plugins-read-only

1 messages · Page 109 of 1

broken condor
#

But nah, seriously, I believe we have souls and that there is a higher power at work. I also believe that higher power created us to create. AI is a perversion of our purpose. We were made to both create and consume, and with AI we can only consume. AI and LLMs, I genuinely believe, and born straight from Hell itself.

upbeat prairie
#

"Buh god created us 2 create!!!" Gang is creating a thing which creates more things not an application of that so called purpose

#

lmfao

broken condor
wary lion
#

not yet i'm still in the planning phase i'm still considering all the possible optimizations and qol changes i want to make also still figuring out how i will do those optimizations like wrapping features in a quantized version would be great but wouldnt be nearly as fast as if i would just recode those entire systems for what i need specifically

broken condor
#

Because be honest, it's not you creating those images, it's the machine

broken condor
#

You tell it what you want to see, and it makes it for you. It's as creative as searching something on Youtube

west elk
#

/world settings worldgentype set HytaleGenerator
HytaleGenerator: v2 Default
Default: v1 Default
Flat: v1 Flat
Void: v1 Void

copper summit
#

Technically thats the humans creativity that the ai is just using so i kinda get his point, but also his point of "I can detect and AI image from a mile away" is just incorrect. If you got the right model it can make videos that arent even detectable unless you dive really deep into it

opaque cape
#

Atleast with a Coding Assistant, I am fully in control of the process, what actually makes it in, The flow we are taking, And I can actually sit there and analyze what its asking me to do

#

Im not asking the coding llm to "Create a hytale mod that lets you jump servers and takes your inventory with you"

upbeat prairie
blazing cosmos
opaque cape
#

Im asking the coding llm "Look in the server files and tell me how I can grab the Player reference, these are the variables I have access to right now"

copper summit
broken condor
opaque cape
copper summit
broken condor
opaque cape
upbeat prairie
#

😂 ✌️ no that's you exclusively here

broken condor
opaque cape
#

Your inventory doesnt follow you between servers in the base game

copper summit
strong musk
opaque cape
#

Physically different servers

copper summit
#

See now your statement is correct

opaque cape
#

What

strong musk
opaque cape
#

I said servers from the start

opaque cape
#

Bruh hes having a stroke

strong musk
opaque cape
#

You almost had me going though

strong musk
#

oh, thats what that means, I had to google that sentance 💀

west elk
copper summit
opaque cape
#

Might start working on a new mod tonight though

copper summit
#

Anyone know why this dont work? I also tried the UseBlockEvent and that didnt work either

public class MenuItemListener {

    private static final String MENU_ITEM_TYPE = "Deco_Book_Pile_Small";

    public static void onMouseButton(@Nonnull PlayerMouseButtonEvent event) {
        // 1. Check for Right Click using the string name to avoid "Symbol not found"
        // Most Hytale enums for buttons are "RIGHT" or "BUTTON_1"
        String buttonName = String.valueOf(event.getMouseButton());
        if (!buttonName.contains("RIGHT") && !buttonName.contains("BUTTON_1")) {
            return;
        }

        // 2. Validate the item in hand
        Item itemInHand = event.getItemInHand();
        if (itemInHand == null || !MENU_ITEM_TYPE.equals(itemInHand.getId())) {
            return;
        }

        // 3. Get the Player and PlayerRef directly from the event
        Player player = event.getPlayer();
        PlayerRef playerRef = event.getPlayerRefComponent();

        // Use the Ref provided in the constructor (inherited from PlayerEvent)
        Ref<EntityStore> entityRef = event.getPlayerRef();

        if (player == null || playerRef == null || entityRef == null) {
            return;
        }

        Store<EntityStore> store = entityRef.getStore();

        // 4. Cancel and Open
        event.setCancelled(true);
        player.getPageManager().openCustomPage(entityRef, store, new MenuPage(playerRef));
    }
}
copper summit
#

Click my tag

fleet gulch
#

shouldn't that run on the world thread?

copper summit
copper summit
west elk
copper summit
#

log the get mouse button?

#

see if its using right or button 1 or whatever?

opaque cape
#

Log everything thats variable thats needed to proceed through the code

fleet gulch
#

@copper summit it may be something to do with the right click (I havent used this particular event yet), but:

// CRITICAL: Dispatch to world thread for any world-modifying operations
world.execute(() -> {
    // Re-validate on world thread (entities might have changed)
    if (!entityRef.isValid()) {
        return;
    }

    Store<EntityStore> store = entityRef.getStore();
    if (store == null) {
        return;
    }

    // Get PlayerRef from store (required for PageManager)
    PlayerRef playerRef = store.getComponent(
        entityRef,
        PlayerRef.getComponentType()
    );

    if (playerRef == null) {
        return;
    }

    event.setCancelled(true);
    player.getPageManager().openCustomPage(entityRef, store, new MenuPage(playerRef));
});
opaque cape
#

Until you find what lookd weird

#

Never such thing as too much logging when debugging

west elk
#

What is BUTTON_1

opaque cape
#

Llm moment

west elk
#

fr

copper summit
opaque cape
#

Your llm failed to know what was the correct method

fleet gulch
#

also I would just put a breakpoint and step through it to see which return its hitting (or thrown exception)

west elk
#

I control clicked the event class and it told me how to do it

opaque cape
#

I always make sure to call out my coding assistant if something looks stupid or wrong

fleet gulch
opaque cape
copper summit
silver remnant
#

how to check for fluid at a location?

copper summit
#

sometimes it mouse 0 and 1 sometimes its left right

west elk
copper summit
#

oh crap

west elk
#

literally control click on it

copper summit
#

it would be 2 huh

west elk
#

no, use the enum like it's intended

#

MouseButtonType.Right

copper summit
#

i gotcha, either way it still should work, that line should be the error

#

oh is it case sensitive maybe

#

ill try that

west elk
#

there is nothing case-sensitive, it's all type-checked

#

stop doing string comparisons

copper summit
#

oh damn that makes sense

opaque cape
#

So even comparing it to the value of 2 is wrong

copper summit
opaque cape
#

Fair

#

I actually found this out the hard way at work, Because we can call java from js code but I wasnt able to do it because I couldnt make the enum type in js

#

Cause in js an enum is just strings and numbers

robust nova
#

Anyone working on a koth plugin at all?

fleet sphinx
copper summit
copper summit
robust nova
#

But yeah it'd probably be considered a mini game as well

copper summit
charred yew
#

@fleet sphinx i don't really want to clutter #showcase; i have instructions on the readme
but tl;dr, grab the Hybric jar from the github releases, place it next to your HytaleServer.jar, extract the assets folder, and then run the Hybric jar

#

as long as HytaleServer.jar is in the same folder right next to Hybric.jar it'll launch

fleet sphinx
#

Ah, I see. Hybric is responsible for launching the Server with new context

charred yew
#

yep, Fabric launches before Hytale (or minecraft) and transforms it as it's loading

fleet sphinx
#

aka the loader ---> loads server jar ---> loads mixins ---> loads plugins

charred yew
#

yep

fleet sphinx
#

Cool stuff. I've just been doing mixins with Hyxin

copper summit
charred yew
copper summit
fleet sphinx
#

I haven't yet had a need for more flexbility yet. Waiting on the Hytale client to be more flexible first. But I'm sure there's a ton of people who could use that flexibility right now

charred yew
#

I'm waiting on the Hytale client to support symlinks on unix-like systems
-# casual 50mb free on my main disk 😅

fleet sphinx
charred yew
opaque cape
#

What the heck is Hybric

charred yew
fleet sphinx
#

Hmm... I didn't have any problems with it

charred yew
#

it didn't work for me 🤷‍♂️

fleet sphinx
#

How so? Thrown error? Or just didn't work

opaque cape
#

So this is for loading Minecraft mods in hytale?

charred yew
opaque cape
#

Oh ok

#

Why not just use Hytales standard modding support then

fleet sphinx
#

Are you familiar with mixins?

charred yew
#

hytale's standard modding doesn't support mixins

opaque cape
#

Im sure itll be added in time

fleet sphinx
west elk
fleet sphinx
#

We want stuff now, so we do it now. Not waiting on them

charred yew
west elk
charred yew
#

-# i made a mod where (back in the day) you had to move a file from .minecraft/essential to .minecraft/mods for it to work and that was easily 75% of the support requests of "help this doesn't work" "did you move the file" "how?"

charred yew
fleet sphinx
#

Modifying the JAR bytecode is a large margin more technical and involved then using an already established API like fabric + the modloader

opaque cape
#

I mean you can also decompile and recompile the server tbf

fleet sphinx
opaque cape
#

But understandably thats a bit prohibitive

charred yew
fleet sphinx
#

There's unsupported bytecode, compiler optimizations, native stuff, recompilation errors from missing dependencies, so much stuff that could go wrong.

charred yew
#

for testing I extracted the server.jar and merged it with Hybric (~100MB of .class files) and it took > 3 minutes to merge it into a single .jar on my mac, even without compiling it

fleet sphinx
#

Not to mention it's probably breaking IP law to do that

#

Imagine the development cycle of waiting 3 minutes every time you want to test a change

charred yew
#

i have serious respect for the hytale devs who actually do that

fleet sphinx
#

They probably have a nice toolkit for hot reloading and stuff but still.
Not easily available to the average developer

west elk
#

I bet the fact that most of the vanilla functionality is implemented as proper plugins helps with iteration times

copper summit
#

Okay so, added logging and it doesnt have any of the logs display in chat

public class MenuItemListener {

    private static final String MENU_ITEM_TYPE = "Deco_Book_Pile_Small";

    public static void onMouseButton(@Nonnull PlayerMouseButtonEvent event) {
        Player player = event.getPlayer();
        if (player == null) return;


        Item itemInHand = event.getItemInHand();
        player.sendMessage(Message.raw("Debug - Item ID: " + (itemInHand != null ? itemInHand.getId() : "Empty Hand")));


        String buttonName = String.valueOf(event.getMouseButton());

        player.sendMessage(Message.raw("Debug - button= " + buttonName));


        if (itemInHand == null || !MENU_ITEM_TYPE.equals(itemInHand.getId())) {
            return;
        }


        PlayerRef playerRefComponent = event.getPlayerRefComponent();
        Ref<EntityStore> entityRef = event.getPlayerRef(); 

        if (playerRefComponent == null || entityRef == null) {
            return;
        }

        Store<EntityStore> store = entityRef.getStore();
        if (store == null) {
            return;
        }


        event.setCancelled(true);
        player.getPageManager().openCustomPage(entityRef, store, new MenuPage(playerRefComponent));

        player.sendMessage(Message.raw("Menu opened successfully!"));
    }
}
bright pelican
#

Hi All,
I added a custom npc ot my server, thought it doesn't get picked by my entity uuid loop.
All other entities and players are picked up in the world store except for the custom one. Any ideas?

west elk
west elk
copper summit
#
this.getEventRegistry().registerGlobal(com.hypixel.hytale.server.core.event.events.player.PlayerMouseButtonEvent.class, MenuItemListener::onMouseButton);
bright pelican
#

Now I'm looping through all entities in world.getEntityStore, I can see it's uuid does exist but....

#

Hang on i gotta dig into this more haha. Weird stuff going on...

fleet gulch
#

also I think you should cancel the PlayerInteractEvent:

this.eventRegistry.registerGlobal(PlayerInteractEvent.class, event -> event.setCancelled(true));
copper summit
# west elk Sounds like player is null or you don't register it correctly

still no logging

public class MenuItemListener {

    private static final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
    private static final String MENU_ITEM_TYPE = "Deco_Book_Pile_Small";

    public static void onMouseButton(@Nonnull PlayerMouseButtonEvent event) {
        Item itemInHand = event.getItemInHand();
        String buttonName = String.valueOf(event.getMouseButton());
        String itemId = (itemInHand != null) ? itemInHand.getId() : "None";

        LOGGER.atInfo().log("Button={}, Item={}", buttonName, itemId);

        if (!MENU_ITEM_TYPE.equals(itemId)) {
            return;
        }

        Player player = event.getPlayer();
        PlayerRef playerRef = event.getPlayerRefComponent();
        Ref<EntityStore> entityRef = event.getPlayerRef(); // Using the inherited getRef()

        if (player == null || playerRef == null || entityRef == null) {
            LOGGER.atWarning().log("Could not open menu: Player or Ref was null.");
            return;
        }

        Store<EntityStore> store = entityRef.getStore();
        if (store == null) return;

        event.setCancelled(true);
        player.getPageManager().openCustomPage(entityRef, store, new MenuPage(playerRef));

        LOGGER.atInfo().log("Menu opened for player: {}", playerRef.getUsername());
    }
}
west elk
copper summit
#

Happen to know how i'd register it if its not this?

this.getEventRegistry().registerGlobal(com.hypixel.hytale.server.core.event.events.player.PlayerMouseButtonEvent.class, MenuItemListener::onMouseButton);
#

wait

#

is it because i put the whole import

blazing cosmos
#

how do you replace water_source with lava? i tried lava_source and it just replaces it with air. trying to modify the worldgen v2 volcanic zone

copper summit
#

When the player right clicks with "Deco_Book_Pile_Small" in their hand i want it to open
player.getPageManager().openCustomPage(entityRef, store, new MenuPage(playerRef));
and cancel the event

blazing cosmos
west elk
#

idk haven't used the node editor yet. sry

blazing cosmos
#

ohh i see how it works now

bright pelican
#

Okay, so I have the uuid of my custom npc which was loaded in via a modpack, but there's no server reference to the custom npc, so I can't use this:
System.out.println(world.getEntity(uuid).getClass() + " is the entity type");

#

Any ideas how to make my custom npc visible or registered to the plugin? I can spawn it in by the entity tools

hollow granite
copper summit
hollow granite
copper summit
hollow granite
#

I thought you are ai bro really sorry

hollow granite
#

🙏🙏🙏🙏

copper summit
#

Wow okay, wild concept, thought you were tryna mock me for the ai anotations on my file

frail mason
#

how to run command as console in a plugin? i cant seem to find it in CommandManager, it needs a player value

opaque cape
#

Might make my own Power Standard, That can eventually integrate with Hyperion whenever that releases

copper summit
#

Hyperion?

opaque cape
#

Its a community driven power standard project apparently

#

Like electricity

#

@marsh edge

copper summit
west elk
opaque cape
copper summit
west elk
opaque cape
bright pelican
#

Anyone have an idea on preventing an npc from moving?

copper summit
opaque cape
#

And could be inaccurate in parts

west elk
#

No, hytalemodding,dev is authored

blazing cosmos
opaque cape
#

Oh ok theyre different than what ive seen previously then

summer ibex
#

Is there a plugin out there for server transfers with gear yet?

copper summit
#

Wait how do i register a packet handler?

#
public class MenuItemListener implements PacketWatcher {

    private static final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
    private static final String MENU_ITEM_TYPE = "Deco_Book_Pile_Small";
    private static final int PACKET_ID_SYNC_INTERACTIONS = 290;

    @Override
    public void accept(@Nonnull PacketHandler packetHandler, @Nonnull Packet packet) {
        if (packet.getId() != PACKET_ID_SYNC_INTERACTIONS) {
            return;
        }

        SyncInteractionChains chains = (SyncInteractionChains) packet;
        if (chains.updates == null) return;

        for (SyncInteractionChain update : chains.updates) {
            if (update.interactionType == InteractionType.Secondary) {

                if (packetHandler.getAuth() == null) continue;

                PlayerRef pRef = Universe.get().getPlayer(packetHandler.getAuth().getUuid());
                if (pRef == null) continue;

                Ref<EntityStore> entityRef = pRef.getReference();
                if (entityRef == null || !entityRef.isValid()) continue;

                Store<EntityStore> store = entityRef.getStore();
                Player playerComponent = store.getComponent(entityRef, Player.getComponentType());

                if (playerComponent == null) continue;

                ItemStack heldItem = playerComponent.getInventory().getItemInHand();
                String itemId = (heldItem != null && !ItemStack.isEmpty(heldItem)) ? heldItem.getItemId() : "None";

                LOGGER.atInfo().log("Item: " + itemId);

                if (MENU_ITEM_TYPE.equals(itemId)) {
                    playerComponent.getWorld().execute(() -> {
                        playerComponent.getPageManager().openCustomPage(entityRef, store, new MenuPage(pRef));
                    });
                }
            }
        }
    }
}
#

I just copied and edited the code on that website but idk how to register it ngl

fleet gulch
#
public class MenuBookPlugin extends JavaPlugin {

    public MenuBookPlugin(@Nonnull JavaPluginInit init) {
        super(init);
    }

    @Override
    protected void start() {
        getEventRegistry().registerGlobal(
                PlayerReadyEvent.class,
                MenuBookPlugin::onPlayerReady
        );
        PacketAdapters.registerInbound(new MenuBookPacketWatcher());
    }
...
copper summit
#

Ty sir!

copper summit
fleet gulch
tidal sandal
copper summit
#

I'll put my code in here

tidal sandal
#

If not, you could even track it yourself

#

then hook into that

copper summit
summer ibex
#

I am far from being able to code. So was hoping there would be a plugin I coudl use/try out.

analog horizon
#

2026/01/29 07:12:21 error printing version: error fetching server manifest: could not get signed URL for manifest: could not get signed URL: HTTP status: 403 Forbidden

tidal sandal
#

learning to code starting with hytale is not a bad idea, hytales api is so easy to use

copper summit
#
private static void saveAndClearInventory(Ref<EntityStore> ref, PlayerRef pRef) {
        try {
            // If they already have a saved inventory, DON'T overwrite it.
            // This prevents saving a minigame inventory if they join multiple games.
            if (savedInventories.containsKey(pRef.getUuid())) {
                LOGGER.atInfo().log("Player " + pRef.getUsername() + " already has a saved inventory. Skipping saveAndClear.");
                return;
            }

            Store<EntityStore> store = ref.getStore();
            World world = ((EntityStore)store.getExternalData()).getWorld();
            if (world != null) {
                world.execute(() -> {
                    try {
                        Player player = (Player) store.getComponent(ref, Player.getComponentType());
                        if (player != null && player.getInventory() != null) {
                            LOGGER.atInfo().log("Saving and clearing inventory for " + pRef.getUsername() + " in world " + world.getName());
                            // Save a clone of the current inventory before clearing it
                            // Stored as JsonObject to avoid NPE on unattached Inventory
                            savedInventories.put(pRef.getUuid(), cloneInventory(player.getInventory()));

                            // FULL PERSISTENCE: Save to JSON file for server restarts
                            saveInventoryToDisk(pRef.getUuid(), player.getInventory());

                            // Clear the contents of the existing inventory instead of replacing the object.
                            // This maintains the link between the containers and the client UI.
                            Inventory inv = player.getInventory();
                            inv.getStorage().clear();
                            inv.getArmor().clear();
                            inv.getHotbar().clear();
                            inv.getUtility().clear();
                            inv.getTools().clear();
                            inv.getBackpack().clear();

                            pRef.getPacketHandler().write(inv.toPacket());
                    
                            // Update disk persistence
                            saveSavedInventories();
                        }
                    } catch (Exception e) {}
                });
            }
        } catch (Exception e) {}
    }
analog horizon
#

??? ;-;

tidal sandal
#

even if its going to be volatile at times it’s still pretty simple

opal glen
#

@tidal sandal Send me the apis in dc

#

Private message sorry I’ve been having so much trouble

tidal sandal
analog horizon
wary lion
#

i made a super deep and accurate code based documentation with lots of examples for using literally everything from the server jar (Asset Editor pages coming very soon) check my bio if you find it helpful give the repo a star

opal glen
#

Yes please my chat events won’t work for some reason wrong api probs

opal glen
wary lion
summer ibex
tidal sandal
#

your master branch doesnt have the individual pages

wary lion
#

its in the wiki

#

i need to fix the link thats my mistake

opal glen
#

What part on your wiki holds chat events ?

wary lion
# opal glen What part on your wiki holds chat events ?

Event System, Event Types basically everything that has anything to do with events prob has an example using some type of event i have another public repo called Simple Color you can see a simple usage of the PlayerChatEvent in the ChatListener class

dire acorn
#

I'm trying to use HeadRotation to set the rotation of the player's head

does calling setRotation on a HeadRotation not actually do anything?

Do I use the HeadRotation to update the transform component instead?

#

ill just try it actually idk why I asked 😭

wary lion
#

@opal glen

#

if anyone that's using my docs (in my bio) and you find any errors or issues please feel free to create an issue on the repo or if you want to make an addition or had an idea feel free to create a pull request (I'm accepting literally all pull requests) and if you find the docs/wiki helpful please give the repo a star

clever pine
#

how can i pause time by code?

fluid coral
#

Does anyone know why my buildings break when I place them block by block in the script if I remove the bottom block?

ocean lake
#

is there a way to edit held item description or other data field in runtime/code so i can save data to it ? like position of right clicked block. or other storage i can access/make to hold data from event/interaction

#

or should i just make a class and init it in JavaPlugin main class so i can access it and store what i need there

west elk
ocean lake
#

ok will try it thx

inland palm
#

Anyone who knows how to code that wants to join a project? we are working on making a highly runescape inspired server and are looking for more people who want to join the cause 😄 if you want to join or just want more info hit me up!

static forge
#

Tab in chat for command how works .

dim osprey
#

I made a plugin that lets you define a custom 3D region (selection) in the world using the Editor Selection Tool and turn that region into a trigger zone. When a player enters the selected area, the plugin detects it and can automatically fire off custom events or actions, based on how the trigger is configured.

#

very

wary lion
#

i was just conidering buying a 512gb server because i want to make a minigames network but i think i should try to make a fork of the current jar and try to fix the memory usage issues

#

i gotta test how much ram a smaller map with 100 players for games like battle royale i alr started coding i'm so worried about memory usage

#

exactly why i need to make this server fork

#

i'm still in the planning phase i'm still considering all the possible optimizations and qol changes i want to make also still figuring out how i will do those optimizations like wrapping features in a quantized version would be great but wouldnt be nearly as fast as if i would just recode those entire systems for what i need specifically

#

like i was going to only wrap world features like chunk data, entity stats and player/entity movement

#

and use quantization to minimize the sizes but idk if wrapping would be the most efficient instead of just recoding the systems

#

i gotta do some super deep diving into the server and try to find any memory leaks (i doubt it tbh the nature of ECS and they way they have it implemented its prob just super memory hungry vs any memory leaks but it doesnt hurt to check

opaque cape
#

tbh I wouldnt overly worry too much, Considering the creator of the largest and most popular Minigame Server is in charge of the game

#

In time the Server jar will definitely be more than capable

west elk
#

ram usage of an exploration server is also extremely different from a minigame server with small, fixed maps

silk holly
#

Hello, I have a doubt. I am creating a plugin with an interface but when I enter the world I get an error that it cannot find the UI that I have as a route.

opaque cape
west elk
frail mason
#

hi is there a Scheduler system in Hytale server API?

blazing cosmos
#

is it possible with the asset editor to create a custom projectile that can replace blocks it flies over?

silk holly
wary lion
west elk
blazing cosmos
west elk
wary lion
#

i got blinded by my hatred of the PlayerChatEvent again

#

like WHY is the format a String and not a Message

wary lion
#

Check example plugins i have a Scheduled Tasks example in there /wiki/Example-Plugins#scheduled-tasks-plugin

silk holly
#

ty...

wary lion
#

if you find the doc/wiki useful please give it a star also if you find any inaccuracy's, typos or issues in general create a issue and if you want to make an addition please msg me or create a pull request

urban gate
#

Hello, My assets are not visible in game when i build my jar file.

in manifest.json i have this enabled:

"IncludesAssetPack": true

When i move my assets to separate folder it shows up in the game

silk holly
#

¿What is my error?

private static final String KIT_MENU = "Common/UI/Custom/Pages/kit_menu.ui";
    private static final String KIT_CARD = "Common/UI/Custom/Pages/kit_card.ui";
west elk
urban gate
#

Its fine, i can use it as asset pack and not plugin. Could provide screenshot but its blocked

silk holly
west elk
silk holly
silk holly
blazing cosmos
#

does anyone know how i can have a projectile replace blocks it goes over?

silk holly
silk holly
# west elk try "Pages/kit_menu.ui" instead

And where I have the java file that does everything, I have it in src/main/java/com/luva/luvasurvival/ui/KitUI.java .

I'm going to try, but the last time it didn't work for me

west elk
#

Then you have a syntax error

sharp ember
wary lion
# sharp ember Nice bro

🫡 if you find the doc/wiki useful please give it a star also if you find any inaccuracy's, typos or issues in general create a issue and if you want to make an addition please msg me or create a pull request

urban gate
#

Idk what happened, restarting pc worked xD

sharp ember
#

Okk

wary lion
#

btw an official docs site is coming soon also 8 different translations will be added all open source

#

i think imma downgrade to a 128gb server just for testing out my minigames server software before buying a huge server because if i can get memory usage more reasonable i can prob stick with 256gb

blazing cosmos
#

still trying to get an answer

foggy hare
#

I'm building a custom HUD and need to show player avatars.

What I have:

  • PlayerRef and PlayerSkinComponent
  • Access to CosmeticsModule.createModel()
  • Custom UI working with UICommandBuilder

What I need:

  • A way to display a player's 3D character model (or render
    it to 2D) inside my custom UI

Is there a specific UI element type for this? Or a rendering
utility I'm missing?

west elk
prisma breach
#

i have a server running on a dual xeon with 256GB RAM... with twenty players, there are 43GB full after 3hours.

static lodge
#

I have a general question. Is it possible to create plugin only with java code or assets are required (except visual).

For example, I want to create custom stat for every user like Attack Speed or RPG stats like Strength, Dexterity and etc.

As I can see default stats like Health and Mana are implemented via assets. So should I do the same or is there programmatic way?

west elk
modest heart
#

Hello, I have a problem with my server; somehow people are ending up on separate worlds. Is there a way to change this?

west elk
static lodge
#

Yes but they are getting serialized from assets as I can see

#

Its nearly possible to do a lot via Asset Editor so I ask question in general: what should be done with Java code and what should be placed in JSON for assets?

west elk
#

Doing as much as possible with assets gives you and your plugins users the most flexibility

dusky sable
#

How could I check if a player is damaged from an arrow? I tried if (source instanceof Damage.ProjectileSource), but it returns false

static lodge
worthy vessel
#

Anyone know a NPC plugin like Citizens for Minecraft?

dusky sable
west elk
dusky sable
empty wyvern
#

is custom component remove on player quit/server restart?

west elk
empty wyvern
orchid lichen
#

So I have setup folders following way: "resources/Common/UI/Custom/Pages/MyCustomUI.ui" but when i add the ui script everything is just red and doesnt work why is that?

west elk
orchid lichen
#

So in the development space in my ui file there is squiggly lines under everything

west elk
#

I bet it's misinterpreting the .ui file as some programming language

#

tell it to interpret it as a plain text file instead

orchid lichen
#

so not doing .ui or?

west elk
#

Hytale's ui is a custom DSL and your IDE won't know the syntax

dusky sable
#

@west elk Do you know if its possible for a plugin to run a command as a specific player?

orchid lichen
#

I see so can i make the file without the .ui then?

dusky sable
west elk
slim crater
#

How I can create a ah plugin?

dusky sable
dusky sable
#

Assuming "ah" meaning Auction House

orchid lichen
slim crater
keen siren
#

Hey, dunno where I can get help for this so I'm posting it here. I've moved the "universe" folder from my local game on macbook to public server that lays on Raspberry. I have problem with time in-game. Time for merchants seems to be frozen and it counts from zero year: 0001-01-01T00:00:00.000000000Z

I tried to remove barter_shop_state.json algonside with Time.json and changing game time to 0: "GameTime": "0001-01-01T00:00:00.000000000Z", so the server can re-create proper files but it does nothing. GameTime passes normally but the merchants are frozen in time and I do not get the restocks properly.

Also I downloaded the mod to show in-game time with command /time and it seems to count time normaly from GameTime, e.g. 1m irl == 1m in game so when I'll make 0001-01-01T01:00:00.000000000Z it'll be 1:00AM and after 5m it will say it's 1:05AM. However days passes normally in-game, like config says and time that shows when going to bed is also working normally.

Any idea how to deal with it?

orchid lichen
#

Man im so close to getting it working but now it says Failed to load CustomUI documentsHypixel_Shock

calm birch
#

So, I attempted to make a farming skill - Can make it give xp for harvesting, picking stuff etc lets use example pumpkins or wheat, so if we harvest the pumpkins or wheat we get xp - However you can -ctrl click to place the item wheat or the item pumpkin on the floor when doing this if you then press F to harvest it again.. Will get xp - It seems when placing the item with ctrl click turns it back into the original crop item? Anyone getting around this issue?

calm birch
orchid lichen
calm birch
orchid lichen
calm birch
orchid lichen
gaunt berry
#

Is there a way to get the original en-us language pack so I could be able to translate it into my own language ? if someone has it please send it to me

west elk
orchid lichen
#

I dont get error anymore and instead the command doesnt work hurray!

#

IT WORKS

#

Thanks for all the help!

oblique thorn
#

Hi, The mod SimpleClaims-1.0.25.jar no longer works. Is this happening only for me, or for everyone?

royal mural
#

guys which fluid id is water and lava?

west elk
royal mural
#

or getFluidId is just returning the block id which i should check its type?

west elk
#

I don't know what you're trying to do, but that sounds like it can make sense

royal mural
#

well im doing a fishing mod, so i need to check if a position is water

dusky sable
#

Does anyone know how to remove/despawn an entity?

oblique thorn
west elk
oblique thorn
#

to ask in Buuz135's discord

west elk
#

Take your message as it is here and copy paste it over there

#

nothing special required

oblique thorn
#

ahaa ok

frail ingot
#

Guys
in case i want to create a custom block/entity with custom behavior do i have to create the entity/block using packs and then write a code for the behavior (plugin)? or the plugin can cover both?

west elk
bronze granite
#

Does anyone know if it's possible to assign a command to a photo in custom UI so that when the player clicks, the command is executed?

west elk
merry harbor
#

Where do you get all this coding info from?

west elk
#

trying a bunch of stuff, looking at the decompiled server code, and community guides like hytalemodding,dev

fossil zenith
#

what are the best mods / must haves?

west elk
#

NEP by SketchMacaw

orchid lichen
#

So my ui pops up and everything and im trying to add image right now this way

        Anchor: (Width: 200, Height: 400);
        AssetPath: "WarriorClass.png";
      }```
The ui file and png is in same folder and i have this in a group that works but when i open ui its white image with red x over it so im guessing it still doesnt find the png any ideas why?
clever pine
#

Is there a way to reload plugins without relogging into the server? I'm tired of having to rejoin to world every time to see plugin changes.

west elk
west elk
orchid lichen
west elk
orchid lichen
#

there i do "Pages/ClassUI.ui"

#

So should it be the same as there?

west elk
#

oh so for you it might be AssetPath: "Pages/WarriorClass.png"; then?

#

i spent a lot of time trying all sorts of paths and then stopped touching it once it worked ^^

#

the red x on white background means it can't find the image, yeah

orchid lichen
#

Yea "Pages/WarriorClass.png" didnt work so ill test like a bunch of paths to see if anyone work. Im thinking otherwise if the image file is to big maybe

#

IT FREAKING WORKS

#

I tried like you "UI/Custom/Pages/WarriorClass.png" and then it works

#

I think images are all taken from UI and when calling uiCommandBuilder it works from after Custom

west elk
#

👏

orchid lichen
#

You truly a goat do you usually sit around helping people? Its super appreciated the help you provide!

modest solstice
#

hmm

west elk
#

ya i work from home and just have discord open on my computer on the side :)

orchid lichen
#

thats awesome bro

errant fjord
#

Might not be the right place to post, but I’m curious if anyone has had success in running the /update command for your servers? I get an error stating assets.zip and my start batch are located in there and should not be? I tried to do a force update and it wouldn’t take. I’ve been just manually doing it myself, but it’d be nice to get the /update to actually work.

zenith moat
west elk
zenith moat
minor oasis
#

Anyone?

tawny karma
#

Hello ! Is there a plugin that can link a Discord role from a Discord server with the whitelist ?

#

It seems like the only ones I have found only allow a whitelist using a simple code sent by a Discord bot

strange trout
#

how would you indentify someone from their discord role?

west elk
#

You could do discord oauth on the server, but that sounds like much more work with the user's experience being almost the same, lol

merry harbor
#

Is there a way I can select a chunk section from the server without a selection chunk tool or /selectchunksection command handler? The only idea I got was using coords and using the command handler but selectchunksection doesnt work with coords, the selection tool also doesn’t have a command right? I thought I could do like a select tool so that I can manually select the coords from the command and automatically select the section of the chunk with a selection handler

compact spoke
#

for my server i making a website, and from there you can do oauth to discord, twitch, youtube, kick, etc.

dense charm
#

can i search for help in that channel if my server wont start?

high bane
pale crest
#

Possible to spawn then track and command enemies/friendly creatures/npcs? Just need a yes or no not how to do it specifically thank you! Have an idea but have not jumped into the entity side of plugins.

signal vale
#

Is the referToServer stuff broken in the latest update? I have this code which definitely worked a couple of days ago, which no longer is:
public static void onConnect(PlayerSetupConnectEvent event) {
event.referToServer("blastmc.tech", 5520);
}

It is registered, and I do get the redirect info on my client, but then I see this screen:
well I can't send an image, but 'An unexpected error occurred.' in the disconnect message

tawny karma
mortal gate
#

How do I set the value of a checkbox in the Ui? #id #Checkbox.Value isn't working :/

strange trout
calm sable
#

After the newest update i have some problems applying the Projectile_Configs, anyone else too?

tawny karma
proven meadow
#

Is there any plugin like vault to merge all economy system in one?

#

One that all other plugins like shops are following

velvet fossil
#

question can we do relative velocity or "local velocity" for projectiles does anyone know if this even exists

median haven
#

How do I add add a new attack to an npc?

I copied the skeleton mage but when I change the attack in the json file, to my custom interaction the npc just disappears. everything is spelt correctly. When I change it back to the original interaction it works normally

ripe trout
#

can i somehow add component to the player/playerref so that they will stay with the player/playerref even after server restarts, player death and such?

pale crest
pliant hound
#

guys, how is the lobby system being implemented? Is it just one server with multiple worlds, or is there already some kind of bungeecord with multiple server?

warm sedge
pliant hound
warm sedge
#

just look at it

#

ClientReferral(@Nullable HostAddress hostTo, @Nullable byte[] data)

pliant hound
#

ok, ty ❤️

empty ether
#

ever since update i crash every time i melee with fist, but attacking with any weapon is fine

halcyon rapids
#

is there a spawn event class?

tribal venture
#

I've been looking online on how to add an interaction but when I type tick0 in SimpleInteraction, it doesn't give me a function

#

Is there another way to add an interaction to a block?

static lodge
#

How to register consumer on PlayerMouseButtonEvent event? It works for PlayerReadyEvent but not for mouse button

mortal gate
#

Why does ui.set("#id #Checkbox.Value", true) not work? it gives me:
Selected element in CustomUI Command was not found. Selector #id #Checkbox.Value

🙁 it's basically the same as adminUI does it... i don't understand why it's not working

random briar
#

is it possible to use the eventtitle just for one player and not entire server?
or do i have to create a command just for that

strange berry
#

Does anybody know why effects (like particles and sounds) on some interaction work and on other not?
It depends if it's embedded?
I'm kinda not understanding right now

random briar
#

hope they add this next update
"/eventtitle test --player=playerName"

#

or even for a specific world for dungeons, eventtitle test --world=worldName

humble plume
#

whats the ID for an AIR block?
i tried "air", "block_air", "void" nothing seems to match

humble plume
random briar
#

its funny if you place blocks you break empty

storm heron
#

make sure you're extending the correct class from the com.hypixel.hytale.server.core.modules.interaction.interaction.config not the protocol package

west elk
daring rain
#

Is there anyway of previewing a block placement of multiple blocks? I know the Paste tool in BuilderTools allow for this but only in creative mode, I was trying to do it for the adventure mod.

summer ibex
sinful portal
#

I'm not 100% sure if there are any other effects related to ItemLevel, but one effect of it is order of the item's recipe in a bench. For example, items are usually ordered alphabetically by recipe in a crafting bench. But items with a higher ItemLevel will be ordered after items with a lower ItemLevel, allowing you to set a custom recipe order in a bench.

west elk
tribal venture
random briar
west elk
random briar
orchid lichen
#

there is just nowhere to find info other than here🥲 im too noob at stuff does anyone know how to bind a textbutton to actual java logic?

frail ingot
#

When I create a new npc in the asset editor (by copying from another npc) how can I strip it from its behavior? meaning i just want it to stand there, not to wander around like every npc

random briar
west elk
frail ingot
# random briar you can go to source instead of edit, then remove those wandering sections

do you mean this for example:
{
"Type": "Variant",
"Reference": "Template_Spirit",
"Modify": {
"Appearance": "Spirit_Frost",
"DropList": "Drop_Spirit_Frost",
"MaxHealth": 81,
"IsMemory": true,
"MemoriesCategory": "Elemental",
"NameTranslationKey": {
"Compute": "NameTranslationKey"
}
},
"Parameters": {
"NameTranslationKey": {
"Value": "server.npcRoles.Spirit_Frost.name",
"Description": "Translation key for NPC name display"
}
}
}

random briar
stray pasture
random briar
frail ingot
random briar
karmic locust
#

to store information about a block (a counter, for example), is there any mechanism in place, or is the way to just store it in a separate file?

stray pasture
topaz cipher
#

Does Hytale support Unicode characters?

west elk
topaz cipher
#

Ah, rip. Alright. So I would need to add custom Unicode support using custom assets?

west elk
minor oasis
#

Is there a programmatic way to hook into worldgen v2/HytaleGenerator so I can write custom noise functions etc but still make use of the generator prop pipeline for biomes, vegetation distribution etc?

random briar
karmic locust
north current
#

has anyone figured out custom naming conventions for items yet? without renaming all instances of the item? Ex: in minecraft, something like an iron pickaxe being named "Starter Pickaxe"?

Also is there an alternative to {itemId}:{num} for different item states?

primal raven
#

I see

merry harbor
#

some1 knows why this isnt working:

                player,
                "pos1 --x=" + posX + " --y=" + posY + " --z=" + posZ
        );

        cm.handleCommand(
                player,
                "pos2 --x=" + pos2X + " --y=" + pos2Y + " --z=" + pos2Z
        );
#

is it bcus of player argument?

random briar
stray pasture
lost mist
#

Is there anyway to cancel a player swinging a sword or combat entirely?

winter trout
#

Good day, lads. Has anyone experimented with displaying custom, dynamic data on an ItemStack, such as in the tooltip? I know we can modify the metadata, but I haven't been able to find any clear way to change tooltip display data. I'm planning to allow a lot of customization on a per-itemstack basis and making a unique item in the config for every combination would be unreasonable.

random briar
west elk
winter trout
#

Oh? I'll take a look... I thought that custom data was bound to custom UIs ;o

lost mist
random briar
pulsar trail
dim osprey
#

Achy you can send event titles to a target player.

random briar
dim osprey
#

Oh i thought you meant through code, not sure about the command

random briar
#

it just says Could not find an optional argument with the name or unique abbreviation of "player"
and i tried "/eventtitle test --player=AchyMake"

west elk
#

This channel is about plugin development, not vanilla commands

#

extending the vanilla non-targeted command to accept arguments is the easiest excercise

dim osprey
#

There is no way to send it to one player through the command

winter trout
viral oak
#

Can we display the player’s inventory on the HUD in an interactive way?

lusty niche
#

Hytale has a CommonAssetsIndex.hashes file for their assets, do I need to make my own for my asset packs? And what checksum algorithm are the hashes using?

quartz plover
lusty niche
#

If I do have common file assets, how do I make the index hash for it? This is just when creating an asset pack - no JavaPlugin involved

tribal venture
#

Is there a way to check if a block has been spawned by your plugin or not? (Outside of creating your own custom block)

lusty niche
#

Okay I figured its sha256sum

quartz plover
lusty niche
#

Okk

sick pawn
outer cairn
#

Does anyone have an example on how to detect the closing/dismissing of a custom ui page? Using the CustomUIEventBindingType#Dismissing I can't get it to work properly. It needs a selector assigned and only when that selector is clickable and then clicked does the event trigger. I would like the event to trigger when the page is closed tho

foggy igloo
mortal gate
#

Is there a way to know which player placed a block or do I need to track that?

sick pawn
# lost mist Is there anyway to cancel a player swinging a sword or combat entirely?

If you're interested in how the forgotten temple does things, in Server/Instances/Forgotten_Temple/config.json, GameplayConfig points to Server/GameplayConfigs/ForgottenTemple.json which contains:

  "Combat": {
    "DisableNPCIncomingDamage": true,
    "DisablePlayerIncomingDamage": true
  },

Which allows you to disable damage for NPCs and Players across a world or instance. If you want granular control where this only applies to some players though you'd need to do something more involved.

random briar
west elk
narrow cypress
#

ok hytale asest editor not loading my project in save mods folder anymore

still surge
#

hey

sick pawn
#

oops, wrong reply -.-

random briar
spring ice
#

@quartz plover Could you send me a link to the discord with people implementing servers? I'm working on an implementation myself and would like to join.

dawn torrent
#

Heya, I'm working on a 'lib' or 'core' for my mods and I'm having an issue with dependancies. Let's call the library "Library" and the dependent "Essentials".

Library has no dependencies in the manifest, Essentials has "Trinex:Library" as a depedent.

Obviously when I run the server without the Lib present, I get:
[PluginManager] Failed to load 'Trinex:Essentials' because the dependency 'Trinex:Library' could not be found!

But when I put the TrinexLib jar file in ./run/mods I start getting this:

java.lang.IllegalArgumentException: Found cyclic dependency between plugins:
  Trinex:Library waiting on: [Trinex:Essentials]
  Trinex:Essentials waiting on: [Trinex:Library]```

This is while running Hytale from the "Essentials" IntelliJ environment. The Trinex:Library manifest has no dependancies in it.

If anyone has ideas please let me know!
random briar
# dawn torrent Heya, I'm working on a 'lib' or 'core' for my mods and I'm having an issue with ...

just do it like hytale server

        <dependency>
            <groupId>com.hypixel.hytale</groupId>
            <artifactId>HytaleServer</artifactId>
            <version>2026.01.28-87d03be09</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/HytaleServer.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.achymake</groupId>
            <artifactId>Essentials</artifactId>
            <version>1.0.0</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/Essentials-1.0.0.jar</systemPath>
        </dependency>
    </dependencies>```
sharp lake
#

I'm trying to add a component to a player, but for some reason I'm getting crashes

WARN||ERROR - java.lang.IllegalArgumentException: Entity contains component type: ComponentType{registry=class com.hypixel.hytale.component.ComponentRegistry@1347899590, typeClass=class trs.plugin.components.BlankComponent, index=144} 
WARN||ERROR -  at com.hypixel.hytale.component.Holder.addComponent(Holder.java:201) 
...
WARN||ERROR - java.lang.IndexOutOfBoundsException: Index out of range: 0 
WARN||ERROR -  at com.hypixel.hytale.component.ArchetypeChunk.getComponent(ArchetypeChunk.java:159) 
store.addComponent(ref, blankCompType, blankComp);
BlankComponent result = store.getComponent(ref, blankCompType);

It crashes when getting the component specifically, even when it's a dummy component with no data

finite pond
dawn torrent
pulsar trail
#

also does anybody know how to set the skin tone when customizing the character

#

when I edit the file to a another valid color, it just resets it back to what it was before

random briar
static forge
#

Hi, I'm having trouble registering my event on certain documents; I see that they need to call eventbus!

frail birch
#

Registering listener or calling the event?

random briar
#

is there a gitHub for the hytaleServer.jar? just instead of using the systemPath

frail birch
random briar
daring rain
#

Hey all. Anyone aware of some way of recreating the paste tool's prefab preview without being in Creative mode? From what I can gather the selection is sent as packet to the client but even if I send the packet in adventure mode I am not seeing any preview

#

In fact I cant even get it to work in Creative mode if I'm using a different item

plain pebble
#

guys how to spawn npc in hytale

runic locust
#

Ola

frail birch
west elk
frail birch
#

Actually on the note of npcs, how do I make a custom spawned one have a despawn timer? Im sure I just need to add a component but idk what one

west elk
night coral
#

Hello guys, can anyone help me? how to disable bow on server? this not work

        Player player = e.getPlayer();
        Ref<EntityStore> entityRef = player.getReference();
        if (entityRef == null || !entityRef.isValid()) return;

        System.out.println("1234");

        PlayerRef pref = player.getReference().getStore().getComponent(entityRef, PlayerRef.getComponentType());
        if (pref == null) return;

        if (SafeZoneProtectionSystem.playerInSafeZone(entityRef.getStore(), pref.getReference())) {
            player.sendMessage(Message.raw("1"));
            e.setCancelled(true);
        }else {
            player.sendMessage(Message.raw("2"));
        }
    }```
static forge
karmic locust
#

about instances, can you make one permanent? or do you have to create a new one every time?

worthy vessel
#

Are custom inventories possible in hytale? Like a player vault?

west elk
night coral
#

Guys PlayerInteract deprecated??

karmic locust
hardy flower
#

hola

plain pebble
frail birch
plain pebble
#

like as object which i can use stuff like .teleport with

velvet fossil
#

Hey question how would one remove the staff's charging so it instantly fires

frail birch
plain pebble
frail birch
#

So to get the npc just do pair.second()

merry geyser
#

Im trying to register an EntityTickingSystem and im having problem with the query can someone help?

green coral
#

Do we have chunk loaders yet? The lag on these teleporters is ridiculous.

merry geyser
tribal citrus
#

is thar a way to make a block move? like falling sand in minecraft or to make a block float in water?

west elk
merry geyser
west elk
analog path
#

Hi all. How can I trigger a interaction via code? Or change a block state?

merry geyser
west elk
#

I've always used PlayerRef with it though. Might be a separate issue if the Player componet type is null?

merry geyser
#

i can try PlayerRef it this doesnt work

merry geyser
#

Registering the System should happen in setup() right?

west elk
#

yes

open stirrup
#

hey i need help i want do the use block i mean a printer and i dont how i do this i ask gemini pro for do the code

charred yacht
#

Hey people, are there any plugins that allow me to connect several servers , so I can have mini games on one and a normal world on another ?

safe osprey
#

is it possible to use PlaceBlock at a distance, like a staff that casts a projectile and it places a block?

west elk
charred yacht
#

Oh

tribal citrus
merry geyser
#

Anyways

public Query<EntityStore> getQuery() {
     return Player.getComponentType();
}

just crashes with Cannot invoke com.hypixel.hytale.component.query.Query.validateRegistry(com.hypixel.hytale.component.ComponentRegistry)" because "query" is null

tribal citrus
#

is thar a way to make a block move? like falling sand in minecraft or to make a block float in water?

sinful smelt
#

Anyone figure out how to read Shift clicking or Shift right clicking? thats the only thing stopping me from completing my custom inventory

tribal venture
#

Is there a way to check whether if a block has been spawned by your plugin or put a marker on it?

charred yacht
#

Where is the best place to find plugins

kind palm
west elk
sinful smelt
sinful smelt
#

modules? Protocol?

west elk
#

hytalemodding dev/en/docs/guides/plugin/player-input-guide

sinful smelt
#

thanks ill take a look

kind palm
quartz plover
merry geyser
frail birch
#

And just to clarify that is inside your EntityTickingSystem class right?

merry geyser
frail birch
#

Would you be able to share the code for the class and how/where you register it also it might need PlayerRef instead of Player

merry geyser
#

In the Plugin setup() i use:
this.getEntityStoreRegistry().registerSystem(new MYSYSTEM());

and the class is empty aside from the constructor which is empty and the tick() function.

#

+this is basically just the PlayerTickingSystem from EyeSpy

frail birch
#

I believe its PlayerRef.getComponentType()

tough ravine
#

There is a guide for the plugin/ mod creation info?

frail birch
merry geyser
frail birch
#

Unfortunately im not sure why thats happening then sorry

merry geyser
#

This is just what EyeSpy did but its not working here

pastel fox
#

question about dedicated servers, has someone figured out where the displayed image is located or a way to change it? same goes for styling of the server name / tought maybe i could be an plugin thing?

fading flint
#

I got the mod to remove durability loss, but it would be nice to be built into the game. 🙂

tribal venture
#

How do you create your own component or archetype?

west elk
fading flint
north current
#

My default role has a ton of commands in /help that are not meant for them- some worldedit stuff, etc. Does anyone else have this problem and know how to get rid of it?

I am using LuckPerms

tribal venture
west elk
eternal sable
#

guys how i fix the Authentication Error?? pls help

ancient night
safe osprey
#

im thinking of getting the coords where the projectile hits and place the block ig

ancient night
#

You might need a custom projectile for it

safe osprey
#

i have made that part in the asset editor, i guess now i have to do actual code

kind palm
#

Glad they took the 64-byte protocol hash out though, that was a bit over the top

steady wolf
#

Question, is there any way of getting the UUID from an username ?
-# It is something that needs to work on offline players but to get player refs of offline people it seems that I need the UUID

storm heron
radiant pasture
#

Hey does anyone knows what i need to use to make stuff in chat "clickable", Also is it possible to make HUD Elements clickable?

storm heron
#

"Hytale:EntityModule": "*"

stiff walrus
#

Has anyone found out how to get the selection from the selection tool?

quartz plover
merry geyser
kind palm
quartz plover
#

They had weird stuff like this before: rs define_packet! { InteractionChainData { fixed { required entity_id: i32, required proxy_id: Uuid, opt(1) hit_location: Vector3f, opt(4) block_position: Vector3i, required target_slot: i32, opt(8) hit_normal: Vector3f, } variable { opt(2) hit_detail: String } } }

#

(From my rust impl, with the same order)

kind palm
#

ah nice you're doing one with Rust macros lol

steady wolf
kind palm
#

I have one with Java reflection:

@WikiDocumented("Protocol#Connect_(0x00000000)")
public record Connect(
    @NonNull
    @FixedLength(64)
    @CharacterSet(ASCII)
    String protocolHash,

    @NonNull
    ClientType clientType,

    @NonNull
    UUID uuid,

    @Nullable
    @VariableLength(max = 128)
    @CharacterSet(ASCII)
    String language,

    @Nullable
    @VariableLength(max = 8192)
    @CharacterSet(UTF_8)
    String identityToken,

    @NonNull
    @VariableLength(max = 16)
    @CharacterSet(ASCII)
    String username,

    @VariableLength(max = 4096)
    byte @Nullable [] referralData,

    @Nullable
    HostAddress referralSource
) implements CodecSpecifiedPacket<Connect>
kind palm
quartz plover
kind palm
quartz plover
#
define_packet! {
    Connect {
        fixed {
            required protocol_crc: i32,
            required protocol_build_number: i32,
            required client_version: FixedAscii<20>,
            required client_type: ClientType,
            required uuid: Uuid,
        }
        variable {
            required username: BoundedVarLen<AsciiString, 16>,
            opt(1) identity_token: BoundedVarLen<String, 8192>,
            required language: BoundedVarLen<AsciiString, 16>,
            opt(2) referral_data: BoundedVarLen<Bytes, 4096>,
            opt(4) referral_source: HostAddress
        }
    }
}```
#

This is so goofy

kind palm
quartz plover
#

Instead of jumping around

kind palm
#

wasn't it always based on the position of the nullable field relative to other nullable fields?

quartz plover
kind palm
#

I'm gonna assume you're fighting the chat filter now lol

quartz plover
#

I hadn't seen your message

kind palm
#

oh mb thought you were sending more code

#

I see your first example though - that's wild

quartz plover
#

Now imagine that in a packet that has like 40-50 fields, with 30 of them being optional
Like ItemBase or BlockType

kind palm
#

did they use multiple bytes?

quartz plover
#

Yeah

kind palm
#

okay yeah they must be generating this and fixed some stuff in the generator or something

quartz plover
#

There were even sneaky ones like this: ```rs
define_packet! {
ItemEntityConfig {
fixed {
opt(2) particle_color: Color,
required show_item_particles: bool,
}
variable {
opt(1) particle_system_id: String
}
}
}

#

If you didn't notice the swapped 1 and 2 your whole codec balks

kind palm
#

lol

quartz plover
#

I had a lot of those, it took a while to fix them all

kind palm
#

are you conformance testing against their implementation?

quartz plover
#

I didn't explicitly test each packet, but I've been using a proxy in the middle that I've modified to try and decode each packet using my library

#

It logs any fields that fails to decode

kind palm
#

Yeah that was my second thought lol

quartz plover
#

The hard part is actually the asset codecs tbf

kind palm
#

are you using proc macros or just template macros?

quartz plover
#

Both

#

Even derive macros

kind palm
#

okay so all the macros lol

quartz plover
#

Yep

kind palm
#

I like the idea of splitting fixed and variable, I was just thinking about doing that. I've been combining reflection with a 'specification' that lets me deal with weirdness a bit more directly:

    @UseCodecSpecification
    public static final CodecPacketSpecification<Connect> SPECIFICATION =
        new CodecPacketSpecification<>(Connect.class, 0, List.of(
            // Byte indicating which nullable fields have been set.
            nullMaskField(),

            // Fixed-block fields
            definedField("protocolHash"),
            definedField("clientType"),
            definedField("uuid"),

            // Dynamic-block fields
            // TODO: offsets
            definedField("language"),
            definedField("identityToken"),
            definedField("username"),
            definedField("referralData"),
            definedField("referralSource")
        ));
quartz plover
#

Are you just implementing the protocol btw?

#

Or rather, making a spec out of it to generate the markdown for the wiki

kind palm
#

Both

#

The above auto-generates serialize and deserialize logic based on the annotations, field types and specification. I just split the two so I can have a cleaner class definition that doesn't include all the offsets, etc,.

quartz plover
#

Oh

#

I have everything generated by the macro, which was fun to make

kind palm
#

Yeah all the reflection logic and custom annotations was the fun bit honestly

quartz plover
#

I haven't managed to automatically generate the macro calls yet, though

kind palm
#

The benefit of having it in Java though does mean that I can essentially import their JAR and throw in a bunch of unit tests to check conformance

quartz plover
#

Like parsing the deserialization logic out of the java classes with ASM and generating the rust code for it

quartz plover
kind palm
#

I would maybe focus on serialization logic actually - it's much cleaner (as the source of information)

#

Or you could stub out their methods and run their code so it builds an in-memory representation that you can then just write out as Rust code actually looking at it, I don't think that's doable

quartz plover
#

I've actually done this, it's just that there are outliers that rely on inheritance

inland palm
#

Anyone coders that want to join a project? we are working on making a highly runescape inspired server and are looking for more people who want to join the cause 😄 if you want to join or just want more info hit me up!

quartz plover
#

WindowAction, Interaction and Selector to be specific, they don't have their fields so I can't rely on the class' fields to see the exact types

#

But without the fields, I lose type information for maps

velvet fossil
#

Does anyone know how to get an axe a sword or anything besides a bow/staff/wand to fire projectiles.

elfin mango
#

Hello, i have 2 questions and i would be glad if you could help me.
If you can answer with a tutorial or documentation that would help me very much.

  1. How can i get the name or data of a Player thats currently offline? (My case would be to get the Displayname, i have the uuid)
    2.How can i make a NPC mine blocks? i already gave him a pickaxe in his hand.
    Thank you
kind palm
#

So just replace WindowAction with the list of classes that extend it instead

#

They all have an abstract serialize method so it should be fairly easy to know when to defer to that logic too

ocean minnow
ocean lake
#

how do i update o replace item in hand after adding modifiing metadata?

quartz plover
#

Tbf I could hardcode their packet definitions and generate the rest as well

kind palm
#

That too lol - in fairness code gen will only get you so far as if they change the whole layout in an update it'll break the code gen too

quartz plover
#

Anyway, my priority is to handle codecs and get the client to join the world, even if it's an empty one

#

For now I'll just git diff with each update to see what's changed and manually fix

kind palm
#

Have you got your parsing stuff on GitHub?

quartz plover
radiant pasture
#

Hey does anyone knows what i need to use to make stuff in chat "clickable", Also is it possible to make HUD Elements clickable?

fringe herald
#

How can I make my custom ore block be spawned in the world with regular world gen?

viscid wren
#

Does anyone know how to define the parameters of an ExplosionConfig in code? I found explosion config entries in the asset editor but ExplosionConfig class doesnt have getters or setters, and I'm not sure if its supposed to or if im supposed to define parameters in a roundabout way

proven gyro
#

anyone know why prefabs / copy / pasting doesnt include entities, even though I have that enabled?

night coral
#

Guys, can we get world in Shutdown? i mean world.execute(() -> { ?

outer cairn
#

is it possible to set a default item animation? I want to have the same animation playing no matter what the player is doing atm. Or do I have to set all of the possible animations?

dawn torrent
#

Anyone know how to write one of the KeyedCodecs for a
Map<String, Pair<Map<String, Float>, Map<String, Float>>>
Aka Map<LocationName, Pair<Location, Rotation>>

Kind of trying to replicate this from the player save:

    "Transform": {
      "Position": {
        "X": -66.171142578125,
        "Y": 120.0,
        "Z": 178.0512237548828
      },
      "Rotation": {
        "Pitch": 0.0,
        "Yaw": -0.8700768351554871,
        "Roll": 0.0
      }
    },```
#

My brain can not figure it out haha

surreal flame
#

what class i need to extend from when i want the console be able to use it?

dawn torrent
# dawn torrent Anyone know how to write one of the KeyedCodecs for a `Map<String, Pair<Map<Str...

I think I've got it... had to make my own data class w/ a codec

data class Home(
    var location: LocationMap = emptyMap(),
    var rotation: RotationMap = emptyMap(),
) {
    companion object {
        val CODEC: BuilderCodec<Home> =
            BuilderCodec.builder<Home>(Home::class.java, { Home() })
                .append(
                    KeyedCodec("Location", MapCodec(Codec.FLOAT, ::HashMap, false)),
                    { data, value -> data.location = value },
                    { data -> data.location }
                )
                .add()
                .append(
                    KeyedCodec("Rotation", MapCodec(Codec.FLOAT, ::HashMap, false)),
                    { data, value -> data.rotation = value },
                    { data -> data.rotation }
                )
                .add()
                .build()
    }
}```
copper summit
#

Did they change the way UI commands work since last night? none of my code works anymore

merry harbor
#

Hello i need some help with a plugin im working on i want to select a chunk without the player being on it i wanted to make the player select it with the selection tool pos1 and pos2 automatically but i keep getting some errors 'an error ocurred executing the command'
this is the code that selects:

        cm.handleCommand(player, "pos2 "+ "--x="+ posXArg.get(context) + " --y="+ posYArg.get(context) + " --z="+ posZArg.get(context));

Or is there an easier way to select a chunk, cus i wanna replace the blocks in it

kind palm
copper summit
radiant pasture
#

Hey does anyone knows what i need to use to make stuff in chat "clickable", Also is it possible to make HUD Elements clickable?

copper summit
#

If you get an essentials plugin one of them does that

#

i forget which one

modest burrow
#

Game is alrdy dead oh no

radiant pasture
#

No i need it for creating some stuff but i can decompile it and look in code then if u know which one xD

copper summit
modest burrow
#

Stating the obvious, they released a game and said here go decompile the jar and make a server even though it’s so bad

foggy hare
#

how to check if a plyer is an operator commands during moding

copper summit
#

Yeah im tired of seeing you "minecraft defenders" sitting here saying "this game has no content" and shiz. go play with creepers my guy

modest burrow
#

7k twitch viewers

#

The game was cooked 4 days out from release it’s chill though. Have your fun g lol

copper summit
#

Attention span rotted from tiktok

opaque cape
#

This guy is obviously here to troll

opaque cape
#

I forgot that Minecraft launched in 2009 with full modding tools and 600 hours worth of content

silk mango
#

Meanwhile mincreaft with its 4 or 5 blocks on release im pretty sure

copper summit
opaque cape
mighty bloom
#

Ah yes because twitch is everything XD the hytale framework and vision is what you dont see which takes time and life before you grasp

opaque cape
#

I hear Hytale is doing alot better on youtube anyway

fast gust
#

Why would anyone watch someone play if you can play the game yourself

opaque cape
desert apex
clever horizon
modest burrow
#

@copper summit get a grip you’re defending an alrdy dead game with little support in 2026 made by a multi million dollar company

vast yacht
clever horizon
opaque cape
#

Everyone just blanket ignore this purp guy till he goes away

valid jungle
#

Is there a way to force an entity to not play any animations other than the one I played ?

copper summit
opaque cape
#

Stop feeding him bro

vast yacht
sharp pumice
#

What would be the best way to lock an item in a hotbar slow so they cant move/drop it and such?

modest burrow
#

Notch made a better game sitting on his toilet 😂

modest blade
junior prism
#

alguem brasileiro pra jogar

fast gust
modest burrow
#

Exactly like where is the glaze from, the game released with almost no documentation for server creators after repping that the game is so multiplayer modding focused. It is legit laggy has horrible performance

#

Hardly holds players

opaque cape
#

Legit Laggy? Bro I think you need to get a better computer

modest burrow
#

No not fps as in server side is

opaque cape
#

It runs at full solid 60fps on my laptop

#

I've not had any server lag

modest blade
modest burrow
void fern
#

had a bit of lag using portals other then that server seems fine to handle

opaque cape
#

We've got 20 Players on a server

ornate raven
modest burrow
sharp pumice
ornate raven
#

no thats only for dropitem event

sharp pumice
#

is there a way to do the other?

modest blade
sharp pumice
#

effeciently

minor oasis
ornate raven
ornate raven
sharp pumice
#

tragic

#

oh well, thanks though! ill test manually

modest burrow
copper summit
#

Oml, this whole morning ive been trouble shooting my plugin and its not even my plugin that was broken, the new update for RPG Leveling is either broken or interfering with my plugin somehow

silk mango
opaque cape
#

Bro clearly doesnt actually know the story of Hytales dev process

minor oasis
vast yacht
ornate raven
modest blade
minor oasis
#

@modest burrow also, this is a channel to discuss server plugins, not the state of the game. move over to #game-discussion , would you?

modest blade
# minor oasis Do it!

i would but i cant spend that much time on something that doesnt bring me anything

vast yacht
minor oasis
opaque cape
modest blade
modest blade
merry harbor
#

How can i access the world in an abstract async command?

modest burrow
#

What happened to open source full documentation as soon as early access

opaque cape
minor oasis
vast yacht
modest blade
copper summit
clever horizon
ornate raven
copper summit
merry harbor
#

is there a way i can do something like this?

World world = HytaleServer.get().getConfig().getWorld;

ornate raven
modest burrow
#

I don’t play anymore I program

merry harbor
ornate raven
#

where you tryna getting

modest burrow
#

Grazed more like Glaze

vast yacht
merry harbor
#

from an AbstractAsyncCommand

modest burrow
vast yacht
north current
#

need people to help develop, test, and build for a server, any takers? 🙂

modest burrow
north current
vast yacht
north current
#

Prison

ornate raven
zealous sonnet
minor oasis
modest burrow
#

I’m not complaining I am just being factful

vast yacht
zealous sonnet
vast yacht
modest blade
#

reporting someone for pointing out flaws in your favorite game

modest burrow
#

Yea idk I think I can have my opinions. And state them in the only developer channel in the discord

zealous sonnet
#

Probably better to just stop at this point. Youre not gaining fans doing it.

clever horizon
zealous sonnet
#

When the mods clean up, and start moderating, channels then yall can complain. Until then, let's just get along and be courteous. It costs you nothing to be kind.

vast yacht
#

I mean technically it costs nothing to be argumentative as well but I digress

zealous sonnet
#

You have bigger issues than being argumentative, Ill admit.

clever horizon
#

Nothing but your own time!

vast yacht
brave bear
#

The sheep fear the wolf, dont stand down @vast yacht

copper summit
#

So my plugin implements custom ui, but if i add any other plugin with custom ui into my server it breaks my server saying "Cannot load CustomUI commands" but both plugins work by themselves just not together, anyone know the reason for that?

ornate raven
#

in general top bottom

copper summit
ornate raven
#

you can open by going to settings > general > bottom there diagnostic mode enable that

vast yacht
copper summit
brave bear
vast yacht
kind osprey
minor oasis
opaque cape
kind osprey
#

oceanic? like everything is just sea?

minor oasis
kind osprey
#

a.....

#

mb LOL

brave bear
#

Down undah

kind osprey
#

ok bud

brave bear
#

People never heard of Australia

copper summit
brave dagger
#

👀

clever horizon
kind osprey
minor oasis
clever horizon
#

I'm avoiding it for now until we get more info on that

jaunty jay
#

Is there any way to edit chat size, font size, font type etc in Hytale at the moment?

copper summit
ionic rapids
#

Hello guys, do you think it's a good idea to put a license of GPL v3 for my mod ? I want that modifications are forced to be shared with others. What kind of license are we allowed to use with hytale mods ?

earnest shale
#

Hey guys anyone know a good /home Mod for Hytale?

jaunty jay
#

Is there any way to edit chat size, font size, font type etc in Hytale at the moment?

copper summit
#

Anyone know if its possible to enable pvp on certain instances but not others?

storm nest
#

mi perfil

ocean minnow
lapis pawn
#

when i make a particle system for a weapon skill mod, every time i log out and return to de world where i made the particle system, the particles just don't appear. the sound is still playing but the particles aren't.

if someone knows how to solve this i would need your answer

opaque cape
past flame
#

hey guys, how can I add text on screen without the blue banner, I just want text popping up in the middle of the screen

stiff walrus
#

Why can't I see the change when I call world.setBlock(x, y, z, "Rock_Stone")?

rain rune
#

So i am listening to the ClientPlaceBlock packet which i can use to get the blockID placed. Any ideas on how to get the blocktype or use the int to identify which block has been placed?

minor oasis
#

I am trying to bundle assets with my server plugin and have set up a separate ``manifest.jsonand set"IncludesAssetPack": true` and

"Dependencies": {
  "Hytale:AssetModule": "*",
  "Hytale:EntityModule": "*"
},

The asset is cached:

Added cached reference to asset 66773cbd...: 1, UI/Custom/Hud/MyHud.ui

But still fails:

System.Exception: Could not find document UI/Custom/Hud/MyHud.ui

Anyone know what could be the culprit?

limpid remnant
#

who has a plugin up for monetization?

opaque cape
#

What are your guys preferred models for Coding Assist?
Anyone here using Claude Haiku 4.5?

clever horizon
rain rune
clever horizon
rain rune
#

😮 period okay that helps thank you , im dumb dumb haha

clever horizon
#

No I've just spent too long reading through the jar lol

outer cairn
#

Is it possible to add a new workbench category to an existing work bench? I can't find anything in the Asset Editor

dawn torrent
#

Is there something existing for timers that I'm missing? Just like something that fires every period of time or something

hushed totem
#

Does Hytale support pushing ui files to client from server? Or do you have to manually add the ui files to client?

#

Also I see no packets are sent to server when single clicking inventory slots on client. This forces server side inventory GUI's to require double click's for actions instead of single.

native pike
#

can i add plugin to a private world?

summer ibex
rain rune
rain rune
clever horizon
bright chasm
#

yo, is there a way to check entity UUID via in-game commands somehow?

clever horizon
bronze granite
#

does anyone know how to use custom ui, it keeps telling me that the ui configuration is bad and the code is good in ui...

rain rune
#

its late and my brain be tiny and smooooth

bronze granite
#

anyone want help?

native pike
maiden goblet
#

Hello, is there a way to create variable via plugin and call it from asset editor? I.e. for statCondition purposes (RPG Level). Add XP on hit from the weapon etc?

clever horizon
#

Maybe you could use the event to schedule a task and check that location for the component?

#

You'd still want to filter it by block/item type to avoid spawning a task for every block placement

unreal crest
#

Does anyone know about mumi troll syndrome in hytale? I ran into some problems with that

tulip hamlet
#

Looking to see if anyone would like to run a Dedicated hytale server with me, get it ready for the full release of the game

hushed totem
#

PlaceBlockEvent is literally handled in the handler for the packet

devout harness
#

I'm struggling to find how to implement getComponentType

#

I was following Kaupenjoe's implementation of custom components, but he doesn't deal with getcomponenttype at all, and I'm trying to create multiple secondary mana systems

clever horizon
#

I'd link you to an example but GitHub is blocked here lol

summer ibex
devout harness
#

I currently have

public class AnareMana implements Component {
    public float currentMana;
    public float maxMana;
    public float regenRate;
    public AnareMana(float currentMana, float maxMana, float regenRate) {
        this.currentMana = currentMana;
        this.maxMana = maxMana;
        this.regenRate = regenRate;
    }

    public static Query<EntityStore> getComponentType() {
        return null;
    }
}

, with the system

public class AnareManaSystem extends EntityTickingSystem<EntityStore> {
    @Override
    public void tick(float v, int i, @NonNullDecl ArchetypeChunk<EntityStore> archetypeChunk, @NonNullDecl Store<EntityStore> store, @NonNullDecl CommandBuffer<EntityStore> commandBuffer) {

    }

    @NullableDecl
    @Override
    public Query<EntityStore> getQuery() {
        return Query.and(
                AnareMana.getComponentType()
        );
    }
}

and I figured I'd implement a query to make it more resource efficient

clever horizon
#

You will have to register both of those in the setup method of your plugin class

#

The registration method returns the ComponentType

#
protected void setup() {
        LOGGER.at(Level.INFO).log("Running setup");
        executor = Executors.newScheduledThreadPool(4);


        RegisterVMObjects.Register();
        ComponentRegistryProxy<EntityStore> entityStoreComponentRegistry = this.getEntityStoreRegistry();

        invocationComponentType = entityStoreComponentRegistry.registerComponent(InvocationComponent.class, "InvocationComponent", InvocationComponent.CODEC);

        this.getCommandRegistry().registerCommand(new TestCommand(this.getName()));
    }```
copper summit
#

Is there a good intellij plugin i can use to visualize .ui files for hytale?

devout harness
#

Kaupenjoe told me to just make an empty component interface, does that still work with the componenttype?

primal canopy
#

Anyone elses world crashing for other people when ur in a different dimension? and until you leave the dimension the server doesn't work for other players

clever horizon
copper summit
primal canopy
#

Ive made 2 different servers and everytime someone comes out of dragonspire the world crashes and becomes null

devout harness
copper summit
mortal anchor
#

hi guys, im learning how to store persistent data but even tho it looks the same as on the modding wiki page it has some errors

public class CurrencyComponent implements Component<EntityStore> {

    private float currencyAmount;

    public static final BuilderCodec<CurrencyComponent> CODEC =
            BuilderCodec.builder(CurrencyComponent.class, CurrencyComponent::new)
                    .append(new KeyedCodec<>("CurrencyAmount", Codec.FLOAT),
                            (data, value) -> data.currencyAmount = value, // setter
                            data -> data.currencyAmount) // getter
                    .addValidator(Validators.nonNull())
                    .add()
                    .build();
}

i think the main error is: Cannot resolve method 'append' in 'Builder'

clever horizon
primal canopy
copper summit
devout harness
primal canopy
#

How would i find which plugin is doing it then? lol

copper summit
clever horizon
copper summit
clever horizon
copper summit
clever horizon
#

For some reason intellij didn't want to give me a suppress option for that warning!

clever horizon
#

The way Java handles cloning is annoying in general. It should not be part of Object at all

pine holly
#

fdcfdrgvhbyjnumkgbvfcdx sz

clever horizon
#

Cat moment

devout harness
royal mural
#

getting closer to finish my fishing minigame mod, will need to do some good animations

clever horizon
pine holly
#

ig ima cat now

devout harness
#

I could also do something with archetypes, although I do not understand their purpose? I have 4 different mana types, I could bundle them as each player should have all 4?

shut zinc
#

any body knows tha angle they use for icons in hytale?

copper summit
#

Is intellij straight bugging for anyone else? everytime i stop my server i have to end the task with task manager and reopen it for it to actually stop. ive even reinstalled it and its still doing the same thing

#

it wasnt doing this last night

#

reinstalled, restarted my vps, nothing fixes it

#

and it keeps on desyncing the memory edits with the saved edits

royal mural
#

they are generated there

quartz plover
quartz plover
#

How are you launching the server?

copper summit
#

i spam clicked ts

#

with gradle

#

Same way ive always done it

quartz plover
#

"With gradle" says very little about how you launch the server

#

Do you have a specific task for it? What is the task definition like?

#

Are you using some plugin that adds that task?

copper summit
#

okay what do you want me to tell you? its running on my intellij console with all the basic launch arg that youd use anywhere else. i figured all that information would be just a basic assumption

quartz plover
#

If it's having some issues it's clearly not just using a basic JavaExec task or just a console task with java -jar. What do you mean by and it keeps on desyncing the memory edits with the saved edits, though? Are you using the remote development option to directly edit the file in your VPS?

copper summit
quartz plover
#

If you're not asking for help, are you just here to complain about it? That's fine, let it all out.

devout harness
copper summit
clever horizon
pine holly
#

you guys like hytale?

rain rune
#

When using onEntityAdded() can we get the position of the entity?

copper summit
still field
#

It will be a Singleton automatically if you just only instantiate it one time I think but I am not a Java super genius

analog path
#

Hi all. Modding development question: Is there a way to "insert" custom data into a block? Like a tag or something. I want to make something like a "light level" for a certain type of block

still field
clever horizon
analog path
quartz plover
copper summit
# still field Tell us how you really feel

I already did, i came here to ask one simple question and this "smart guy" thinks he knows better than me and is trying to tell me that what i literally just said isnt true and he clearly lacks knowledge on intellij anyway if he cant understand my very basic sentences

pine holly
#

hytale

rain rune
clever horizon
still field
#

That's what I get for modding an early access game but it's still frustrating

fiery ruin
#

I may just be unable to find any documentation on this since hytale is rather new, but is there a way to add custom logic to blocks, so that it does something randomly (alike minecrafts random tick)?

peak mural
#

Anyone got any recommendation for a full essentials mod for my server? I want to start with one and stick with it, I've been looking at EliteEssentials, EssentialsCore, and EssentialsPlus.

clever horizon
pine holly
#

I use one of them but I honestly can't remember lmao

still field
copper summit