#server-plugin
1 messages · Page 2 of 1
I liked maven, tried gradle, and then was very grateful for maven for existing.
There are moments that starting an ide and letting gradle load takes up to 10 minutes
Chump numbers. If you mod MC it can take up to half an hour to an hour depending on how your computer feels that day.
does this mean a block with decayBlock component was expected but the block ticked didnt have it?
"-" represent . in package order so the dc automod doesnt think its a website
my mod broke with the new update while I was working on it. is their going to be documentation updates soon because I kinda need them.
is there any chance blocks.forEachTicking(blockComponentChunk, commandBuffer, chunkSection.getY(), ((blockComponentChunk1, commandBuffer1, localX, localY, localZ, blockID) -> { Ref<ChunkStore> blockRef = blockComponentChunk.getEntityReference(ChunkUtil.indexBlockInColumn(localX,localY,localZ)); if (blockRef == null){ return BlockTickStrategy.IGNORED; } else { DecayBlock decayBlock = (DecayBlock) commandBuffer1.getComponent(blockRef, DecayBlock.getComponentType());
can produce that error?
Maven does seem to be lighter, but Gradle, at least for me, is much better to use because of the automations I can implement.
Someone also experience Black UI issues? And knows what the Problem is
Hello, if I attach a component in asset json like so:
"BlockType": {
"BlockEntity": {
"Components": {
"MyComponent": {},
}
How can i setup so i can provide values within brackets, like so:
"BlockType": {
"BlockEntity": {
"Components": {
"MyComponent": {
"Value1": "Text",
"Value2": 12
},
}
I want multiple items to use the same component but have different value initialized
Does anyone know what tints the Player and Weapon when a signature move is used?
I think i'm hitting a limitation with my UI... what is the maximum element count?
Hey guys, I am currently searching for the file / class that handles the UI / HUD that displays when you have a compatible block for the builders hammer.
any clue what the name of it is? I want to change the value of blocks that can be displaced, seems to be hardcoded atm
If you click into Item>BlockGroup it uses what's defined there for the variants it switches to for each type of item when you use the build hammer, so if you want to add a new variant or remove one, you do it there, if that's your goal.
no, but thanks :). I already added a new group with 6+ variants. Problem being that the selection wheel only displays the first six variants. Any clue where the amount of variants displayed is handled? probably searching for a .ui file
How can I check from the list of players on the network which player is standing next to my block if I have a custom block component?
ExampleBlock exampleBlock = (ExampleBlock) commandBuffer1.getComponent(blockRef, ExampleBlock.getComponentType());
if (exampleBlock != null) {
WorldChunk worldChunk = (WorldChunk) commandBuffer.getComponent(section.getChunkColumnReference(), WorldChunk.getComponentType());
World world = worldChunk.getWorld();
int globalX = localX + (worldChunk.getX() * 32);
int globalZ = localZ + (worldChunk.getZ() * 32);
// We need to execute setBlock on the world thread as you cannot call store functions from a system
// This is because of the architecture of the server, depending on your needs you can also use the CommandBuffer
world.execute(() -> {
List<Player> test = world.getPlayers();
final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
LOGGER.atInfo().log("Gracze " + test);
for (int offsetX = -1; offsetX <= 1; offsetX++) {
for (int offsetZ = -1; offsetZ <= 1; offsetZ++) {
if (offsetX == 0 && offsetZ == 0) continue;
world.setBlock(globalX + offsetX, localY, globalZ + offsetZ, "Rock_Ice");
}
}
});
return BlockTickStrategy.CONTINUE;
} else {
return BlockTickStrategy.IGNORED;
}```
is there a way to mirror the way your hair is in avatar? (and ig other cosmetics too)
There's a selection wheel with the build hammer?
yes, with e.g. rock aqua in your hand - the hammer somewhere in your inventory - press q (might require op) then you get a selection wheel
world->getStore()->getPlayers()
loop trough the players and get their the TransformComponent by their TransformComponent.getComponentType from the playerrefs store, check the position of the transform component against the util function that will give you the world position of the block.
atleast something along those line, gradle have broken my entire dev environment so can't confirm right now.
is that a 3x3 frost walker or smth
wait not frost walker its around a block
Yes, because this is the text of a custom block component.
Hey! so I wrote code that grabs entities from a certain distance around the block pos, feel free to steal it and twist it for your need
fun collectEntities(entityStore: Store<EntityStore>, blockPos: Vector3d) {
val spatialRes = entityStore.getResource(EntityModule.get().networkSendableSpatialResourceType)
val results = SpatialResource.getThreadLocalReferenceList<EntityStore>()
results.clear()
spatialRes.spatialStructure.collect(blockPos, 1.0, results)
for (entityRef in results) {
if (Belt.isItemRefBeingPush.contains(entityRef) || mobsOrPlayerOnBelt.contains(entityRef)) {
continue
}
val itemComponent = entityStore.getComponent(entityRef, ItemComponent.getComponentType())
val transform = entityStore.getComponent(entityRef, TransformComponent.getComponentType()) ?: continue
val pos = transform.position
val centerBlockPos = Vector2d(
blockPos.x + 0.5,
blockPos.z + 0.5
)
val distance = centerBlockPos.distanceTo(
Vector2d(pos.x, pos.z)
)
if (distance >= 0.7 || pos.y <= (blockPos.y - 0.25) || pos.y >= blockPos.y + 1.5) {
continue
}
if (itemComponent == null) {
mobsOrPlayerOnBelt.add(entityRef)
continue
}
val startPos = transform.position.clone()
startPos.y = blockPos.y + 0.5
val boundBox = entityStore.getComponent(entityRef, BoundingBox.getComponentType()) ?: continue
itemsOnBelt.add(ItemOnBelt(
ref = entityRef,
progress = 0.0,
startPos = startPos,
boundingBox = boundBox
))
Belt.isItemRefBeingPush.add(entityRef)
}
}
Basically it scans in diameter defined by spatialRes.spatialStructure.collect
also sorry it's in kotlin, you'll need to convert it into java, but shouldn't be too difficult
I'm thinking about developing an open-source plugin similar to LWC/GriefPrevention.
nice! good luck
I don't believe there's any inbuilt way config wise.
but it'd be a very simple server plugin to make. all chat messages are cancellable server side.
so you can code up a simple plugin to when the server receives a message in game chat, it cancles it before it even reaches any other players
there is also Mute Chat Server Admin Plugin on curseforg, but im unsure if that's enabled by default or need to do a command first.
if you don't trust other tools.
it really is a very simple first mod / plugin you could make yourself.
I'm getting a message on my dev server: One or more plugins are targeting a different server version. It is recommended to update these plugins to ensure compatibility. Problem is i have set the server version to *. I was planning on ignoring this but my only issue now is that my asset pack isn't showing up in the asset browser. Anyone know what is going on?
if you dont use server version and use * thats just going to come up but i dont think it can cause not showing up like that are you sure you are looking at right pack or uploading right pack to server
I'm not uploading the pack to the server, i guess i might just need to sync assets maybe? I have set server_version=* in gradle.properties. This seems to have only happened after the latest update
What is the current version? How do i find out?
2026.02.18-f3b8fff95 i think
you can see it during server startup, via /version command, and below the play button in the launcher
2026.02.19-1a311a592 now
im going to try directly targetting the version instead to see if that fixes it
is that prerelease
I believe * is unsupported now and it always should be explicit
Yeahh.... im just lazy i see
okay, can i at least give a range or like from version x and newer?
well for now it's just a warning, not a strict requirement ^^
there will be a better system for this in the future but this is it for now
although im lazy, i at least want to know what the correct practice is so i can balance best practice with .... ease of use...
okay fair enough... i will just target specific versions for now
I've repeatedly said this in the past: We aim to have a proper deprecation policy in place to prevent this but right now the logistics of imposing that on the team while keeping updates up is not feasible.
I gave us 3 months of "breaking mods" post release to develop this deprecation policy and we aim to implement it by the end of the 3 months.
Right now the best you can do is to prepare you mods on the final build of pre-release to ensure compatibility when release drops.
I know it is a pain but in order for the game to thrive, we need to make significant progress on the game and technological foundations. It sucks and sadly this is something we'll have to suffer through for a little longer. It's the cost of rapid progress that keeps the player base alive. Sorry 😥
slikey via twitterslikey/status/2023806743700992489
No i totally agree with their stance, not throwing shade or shitposting but i just wanted to know what is best practice for right now. all good
fixed the warning, however the assetpack isn't showing up in my asset editor... ermm am i supposed to be doing something different or...
"IncludesAssetPack": true, is in the manifest soooooo am i doing something wrong or....
you cant edit plugins resources right?
i have been editing the asset pack introduced by the plugin since v1
you might have to add Hytale:AssetEditor in your dependencies
sounds good, ill give it a go
this stuff right?
uh can i send you image in dm
sooo.... i added that, it loads the assets that are already there
how hes editing a jars assets
any error messages?
i was looking for one but i can't see any relating to my plugin. Lemme check again
do i need to readd the pack in the asset editor or something? or am i just missing something. I can't see any errors
The assets already present that i was working on before are loaded, just not picked up by the asset editor
if it's part of your .jar, you don't need to manually add it to the asset editor
{
"Group": "${plugin_group}",
"Name": "${plugin_name}",
"Version": "${plugin_version}",
"Description": "${plugin_description}",
"Authors": [
{
"Name": "${plugin_author}"
}
],
"Website": "${plugin_website}",
"ServerVersion": "${server_version}",
"Dependencies": {
"Hytale:AssetEditor": "*",
"Hytale:EntityModule": "*",
"Hytale:BlockModule": "*"
},
"OptionalDependencies": {},
"DisabledByDefault": false,
"IncludesAssetPack": true,
"Main": "${plugin_main_entrypoint}"
}
is it the * versioning xD or...
problaby not you just need to make it i need it not specific one
What's the problem? I caught the conversation halfway through.
essentially before the latest update, whilst developing my plugin i could edit the assetpack supplied by my plugin. This update has caused the asset pack to no longer appear
but the asset pack is still loaded from what was there prior to the pack but i now cannot edit it because it doesn't appear anymore. I have added the asset editor to the dependencies but it still doesn't load. I cant seem to find any errors
Have you tried doing a clean rebuild?
Im not really the most aquainted with gradle so no
How do i do that?
I usually do it directly through the IDE's terminal, but if you're using IntelliJ, you can also do it via the interface. In the upper right corner of IntelliJ, there's Gradle; click on it and it will open your project's Gradle file. Then click on "Tasks" and then "Build," then double-click on "Clean."
I usually use "gradlew clean build" in the terminal, it works too.
unfortunately didn't help. When i used runServer and join it, after opening the asset editor it still doesn't appear x_x
ohh idk if i was clear, im talking about editing it on the server live
im having an issue trying to implement the scythe into the game and for some reason it wont gain signature energy on a light attack however it does on a heavy attack any idea what i messed up or am missing i managed to give it a signiture attack currently just using the battleaxe whirwind but it takes forever to gain the energy since its heavy attack only
does anyone know of a plugin that makes memories player-specific instead of shared?
@real cave Sorry to bother you, but does your particle tool allow me to view and pinpoint specific particles? There is a specific spawner I am trying to track down so that I can change the particle color. At the momement I am just fumbling around in the dark so to speak.
Hmm, kind of, You could load each particle spawner and look at it. And maybe 60% look pretty close. Or you could load the entire Spawn system then check each spawner. Most the systems load. There are a few that access spawners in a few locations I can't easily get to so those need extra work
but yeah you could try it that way. Its an interesting problem.
What is the particle spawn by/or attached to?
I think the best option is to identify which texture it uses then check all the particles that use that texture would also be an option
I've thought about a particle/system gallery where you could load lots of them in a 3d space to see what each looks like. I'm not sure if it would be better to make this in a game map you move around in or in an app you see them in. But making a gallery of all the particles would be helpful
Its at the tail end of the Vortexstrike Signature Move. As the Stab animation finishes, there is a final blue particle that makes its way don the hilt of the sword. I've checked all of my particles and I can't find anything blue. Two of the 3 Swords I have made so far have it. The second sword I've made is lacking this particle all together. I've compared the particles of all three weapons. did that for the past two hours. Having a gallery like you mentioned would be a MASSIVE HELP!!!! For now though, I have no clue what affects that particle. Its quite literally the very last particle on the sword, when Vortexstrike ends.
I'm working on a Hytalor-based patch that fixes issues in NoCube's mod series as the original author isn't updating the mod anymore
Currently looking for issues you have encountered - Search "Fix NoCube's Mods" in CurseForge
You're my hero! I love the NoCube Mod series, I'll have to check this out when I have time! 😎 👍
I'm not sure. and I have evidence for this and I haven't had the time to check it but they have this thing in entity called effects. and there are alot of them. I think it might be related to that. like I said I've not even looked at it yet. I have so much I'm already struggling to finihs but maybe look at those files and see whats there
I'll check it out. So Entity -> Effects right?
maybe they are status effects? for the hud?
oh then ModelVFX what the hell is that? it's nother folder of stuff
{
"SwitchTo": "PostColor",
"EffectDirection": "BottomUp",
"AnimationDuration": 1.0,
"AnimationRange": {
"X": 0.19,
"Y": 0.4
},
"HighlightColor": "#94f9ff",
"HighlightThickness": 5.0,
"UseBloomOnHighlight": true,
"NoiseScale": {
"X": 1.0,
"Y": 100.0
},
"PostColor": "#9ef7ff",
"UseProgessiveHighlight": false,
"LoopOption": "Loop",
"PostColorOpacity": 0.192,
"CurveType": "QuartOut"
}
How to focus TextInput with code? ( Make TextInput active )
Please make sure to embed next time before you post incorrectly
The correct way to do it
{
"SwitchTo": "PostColor",
"EffectDirection": "BottomUp",
"AnimationDuration": 1.0,
"AnimationRange": {
"X": 0.19,
"Y": 0.4
},
"HighlightColor": "#94f9ff",
"HighlightThickness": 5.0,
"UseBloomOnHighlight": true,
"NoiseScale": {
"X": 1.0,
"Y": 100.0
},
"PostColor": "#9ef7ff",
"UseProgessiveHighlight": false,
"LoopOption": "Loop",
"PostColorOpacity": 0.192,
"CurveType": "QuartOut"
}```
It needs to be set as a code block on discord for better reading
lol
<suffix>
need to use the java keyword. 😮
Make sure to remove game developer out of your bio
Im suprised you call yourself a dev but cant embed correctly, lol
Common these days with all of those AI chat bot lmao
I wonder how many people calling themselves developers would make it if they just had the compiler, base provided libraries, and no external dependencies to make a projekt.
I would develop unemployment
are there any good plugins for providing in-game information to players yet? Like signs or something alike
There is the hologram feature in vanilla
We had a problem at one place i worked, where they recruited a web developer with long experience with a large javascript project to make some webstuff for the company.
The main issue was that they couldn't do anything, since the company did not have typescript setup, did not use angular, and did not have the build pipeline for the webproject.
So they had no idea what to do, it turned out their actual job title should have been typescript angular developer, because they had no idea how to even write basic javascript or set it the environment, unless they where in a pre configed project that was explicitly angular and typescript.
is there a command for creating those? Or do you need to use the Java API?
There is a sektion on hytalemodding
The hologram stuff is the same logic as being used for when placing large items or if you turn hologram/placement allway on right?
OH. Someone did ask about items only visible to specific players. You can't see other players holograms as is, right?
Is it possible to spawn particle but somehow specify its starting position and ending position so it flies from point A to point B and dies?
does anyone know how to remove the leave message in hytale (i.e. player left from world "world name")
I could be wrong but I think I saw someone saying it was hard coded for now
For now, you have to add a packet filter for it
But in the next update, there will be an option for it on the RemovedPlayerFromWorldEvent
Worth the wait atp for something so tiny as 2 messages haha
Was trying stuff yesterday for that seeing that code make me feel a bit dumb 😆
has anyone here gotten an error when placing a custom block before, it kicks me of the testserver (server stays running) and throws an error while verifying components
" expected (custom component) but found null"
Code builds again.
Are the parameters of your block and related json files valid? (Like editor might not throw invalid json error, but some systems may or may not support lists/only single value, maybe you have a file which has overrite method trying to overrite a function (compute) and not a value, some systems might not support functionality you are trying to implement from other systems (lets say entity can have particles attatched to it, but they may be triggered by state but not by different animation (like you can't attatch special particle to death animation (from my experience, may be wrong, it's just example) but can attatch to block changing state from inactive to active)), are there no null fields? (Like when you press add lets say new entity to entity spawn list (which defines what entities where, how often and when spawn in different biomes) it will show error smth smth cannot be null, so then you expand you new key (lets say id:0) then press entity id and enter/select your entity). Just some fixes which had helped me
In the hytalemodding wiki under ECS -> block components -> 5. Configure in-game is this json style view how do i get to this? seems to be in asset manager but i cant find it
i just created one using asset editor, first time ever so i think i screw smth up there
Best way to learn this at the moment is probably to take existing hytale block, press Override Asset in top right in the orange bar, add your own block name (it will have all properties from the original), then search some other parts (lets say recipie, sounds, animations) and do the same.
what i have done (i think) was create new pack, copy a block (bedrock) into pack under DecayBedrock and added my decay component with all values initliazed
in the very top right, light grey bar, you have buttons editor and source. editor is the ui, source is plain json.. some systems do not have editor set up yet, and also sometimes editor may not show some/many parameters, while json shows all, but in json you cannot select specific entities (where you press, select folder, another folder, entity you want to use), you can only input entity id directly
How do I prevent players from placing markers on the map?
are all values not null?
yes
NoesisGui date :? (For intended imp ?)
Nothing precise yet
Could anyone tell me where a weapon is defined as two handed or one handed? Testing some node assignment stuff but not having any luck in the asset editor
I think it's the Compatible checkbox under Utility. That's the only actual difference I can observe between single and two handedness
Have you looked at the json files and also its parent file of each?
Hey, i have a problem with adding recipes, if i create them for bocks everything works untill i reenter the world, after that some are existing and some are missing, anyone knows why?
sounds a bit like a naming problem. Could it be that you use some standard template names? if so sometimes they'll be overwritten by the standard hytale template (at least happened that to me)
Is there a way to genarate a world only from connected templates, no terrain and not pre built?
i want to add a crafting recipe for the branch types so i overrided the asset and added a crafting recipe
Hello, I have a legal question regarding Hytale modding. The EULA states that you own the mods yourself, but Hypixel Studios can also use the mods entirely for their own purposes. But what if someone creates a mod that costs money and contains mechanics that they have patented? Can Hypixel Studios still use the mods, or can the owner of the mods sue Hypixel Studios for patent infringement?
Void world and prefabs?
- Not a lawyer
- The license you grant Hypixel Srudios only pertains "To the extent your Mods are used with or shown within the Game or the Service". This essentially means they can only use your mod in connection with services they provide (or will provide), like an in-game mod discovery feature. If you do not publish your mod in the official store, they won't have any reason to touch it.
- The license you grant Hypixel Studios as part of the EULA is separate from the one you grant your customers when they buy your mod
- It would be copyright, not patent right
If I patent mechanics that are in the mod, then it is very much a patent right, and they do not seem to be covered by the EULA.
I seriously doubt the courts will allow you to patent systems that depend on third party dependencies like the hytale API and client
Even if the EULA would allow it
Which I also doubt
I mean i heard they are patents of photoshop plugins which is also third party api i wonder how the courts allowed that
but i mean it kinda weak because even if you try to protect your mod with the patent system the patent only is only valid for limited years and after that you don't have any right on your side
is there anyway, to remove invisible block after mods uninstalling? Like the purple/black blocks
Photoshop plugins are different from hytale mods in that they (the patentable ones) are "technological innovations". It would be very difficult for you to make such a claim about a hytale mod
This is from the Archetype.class file, and it gives me the second IllegalStateException. This means, to my understanding that the list of component types for the asset (customblock with custom component as only active component) is longer than the list of components, but I have no idea how that happens or how it could be fixed
int len = Math.max(this.componentTypes.length, components.length);
for(int index = 0; index < len; ++index) {
ComponentType<ECS_TYPE, ?> componentType = index >= this.componentTypes.length ? null : this.componentTypes[index];
Component<ECS_TYPE> component = index >= components.length ? null : components[index];
if (componentType == null) {
if (component != null && (ignore == null || index != ignore.getIndex())) {
throw new IllegalStateException("Invalid component at index " + index + " expected null but found " + String.valueOf(component.getClass()));
}
} else {
Class<?> typeClass = componentType.getTypeClass();
if (component == null) {
throw new IllegalStateException("Invalid component at index " + index + " expected " + String.valueOf(typeClass) + " but found null");
}
Class<? extends Component> aClass = component.getClass();
if (!aClass.equals(typeClass)) {
throw new IllegalStateException("Invalid component at index " + index + " expected " + String.valueOf(typeClass) + " but found " + String.valueOf(aClass));
}
}
}
}```
For context, clearing the "DecayBlock": { "TicksUntilDecay": 120, "BlockIdAfterDecay": "Rock_Ice", "TicksPassed": 0 }
from the json file using the asset editor no longer makes me get the error, but the moment DecayBlock is added, even without initializing any values, it throws the error
any ideas would be appreciated, kinda stuck rn
Hi
Does anyone know if its possible to get a players head via commands?
Is it possible to get the username of a user from its uuid but even when he is not online ?
You could read it from the stored data.
But that obviously would mean they have tried to connect at some point and the server have stored their information.
Essentially its as simple as looking at the player folder on the server, i think the file name itself is their uuid.
Yea so im now storing it is it possible that users like change their username or something?
The server can override the packages, a users name might change namechange requests.
another option you could use is look at the arg types class.
Theres an arg for PlayerLookup or something like that.
(take a look at how they do it)
This is the one i was thinking ArgTypes.GAME_PROFILE_LOOKUP_ASYNC
So its not a secure system to store any data you think will be infinitly accesible trough the data provided.
You can get a player's data from offline storage like this:
Universe.get().getPlayerStorage().load(playerRef.getUUID())
Oh Nice
That was exactly what i was looking for! Thank you!
Do you know if it is possible to also when aggain a playerRef arg to a command to check for the offline thing or does that do that automaticcally ?
I don't know if the ArgTypes.PLAYER_REF does offline players by default, but I suspect not. But you can easily implement a custom argument type for this yourself
Is there an example on how to do a custom arg?
Do you still get the playerref when they are not online? Or is the ref allways loaded but there might not be data for the player entity and component itself?
hi, i'm trying to make an system for detecting if a player is close enough to my block but how to get the position of my block when using TickingSystem<ChunkStore>
public class PlayerAlarmTickSystem extends TickingSystem<ChunkStore> {
private final Query<ChunkStore> blockQuery;
public PlayerAlarmTickSystem() {
this.blockQuery = Query.and(PlayerAlarmComponent.getComponentType());
}
@Override
public void tick(float v, int i, @NonNullDecl Store<ChunkStore> store) {
store.forEachChunk(blockQuery, (archetypeChunk, commandBuffer) -> {
store.getExternalData().getWorld().execute(() -> {
int size = archetypeChunk.size();
for (int index = 0; index < size; index++) {
Ref<ChunkStore> ref = archetypeChunk.getReferenceTo(index);
PlayerAlarmComponent device = archetypeChunk.getComponent(index, PlayerAlarmComponent.getComponentType());
if (device == null) {
continue;
}
}
});
});
}
private boolean isAnyPlayerInRange(PlayerAlarmComponent device) {
return true;
}
}
public class CustomPage extends BasicCustomUIPage {
public CustomPage(PlayerRef playerRef) {
super(playerRef, CustomPageLifetime.CanDismiss);
}
Does anybody know why we have to pass in the playerRef here? We pass the playerref of the player we will show the ui to or what?
Does the offline storage also have playerRef component on the player?
Hi, is QUIC or TCP more stable in your experience?
hi iv been working on a weapon mod and 3.0 hit when the first weapon was done i updated the version check on the mod but still cant launch with out validation off the weapon works perfectly fine and iv encountered no errors is there anyway to figure out what part of the mod is broke/incorrect for validation
I haven't checked it out myself yet. If you try it out, please let us know <3
always depends on the context
Yes, the player who this UI will be shown to
are you sure that it's your mod erroring? Not something else (like a dependency) you have installed
yea the mod was built completely isolated just the mod and base hytale
@ashen storm and did you update your manifest.json to the current version/ build number? if the error is still happening you can check your logs of the world where the mod is loaded there are some extra infos what is broken (search for SEVERE errors)
Tried it. doesnt seem like there is
yea i made sure the manifest was updated ill check logs tho
which context?
Hello,
I need some help. To access a workbench, I’m still using the BlockState class, which I populate with chunk.getState(targetX, targetY, targetZ);, and then I cast it with if (state instanceof ProcessingBenchState bench) { ... }.
I don’t understand how I can adapt my code to retrieve the same thing.
I know I need to use Component<ChunkStore>, but I don’t know which component to use.
can you help me ?
I find this method to get Ref<ChunkStore> :
public static Ref<ChunkStore> getBlockEntity(@Nonnull World world, int x, int y, int z) {
ChunkStore chunkStore = world.getChunkStore();
Ref<ChunkStore> chunkRef = chunkStore.getChunkReference(ChunkUtil.indexChunkFromBlock(x, z));
if (chunkRef == null) {
return null;
} else {
BlockComponentChunk blockComponentChunk = (BlockComponentChunk)chunkStore.getStore().getComponent(chunkRef, BlockComponentChunk.getComponentType());
if (blockComponentChunk == null) {
return null;
} else {
int blockIndex = ChunkUtil.indexBlockInColumn(x, y, z);
Ref<ChunkStore> blockRef = blockComponentChunk.getEntityReference(blockIndex);
return blockRef != null && blockRef.isValid() ? blockRef : null;
}
}
}
can someone explain to me what i can do with earlyPlugins? i guess is that i can do some kind of byetcode injection... if yes is there already some examples on how to do so?
Network quality, cpu overhead, encryption requirements, number of streams, etc
yes, correct. for some examples you can check Nozemi/hytale-server-patcher or Build-9/Hyxin on GitHub
that's not the kind of context that's relevant when choosing between tcp and quic. if you're not knowlegable enough about this stuff, don't overcomplicate it and simply use tcp for the integration support and fewer headaches.
no need for microoptimizations
How does item metadata work? Is it possible to change an item's name via a plugin?
metadata is arbitary data you can attach and read later, but it does not interact with any existing systems and displays. You can technically change the name of an item asset, but it will update for all items of that type. there are currently no custom names for specific item stacks.
How can I create a way to show the player the status of my item, either as a description or a specific display of that item?
how to limit the execution of actions in a custom block component, e.g., once every 3 seconds
has anyone replicated the npc cmds into pure java methods yet (i.e. not relying on the tree/or the json but rewriting how an npc interacts with the internal java methods)
What is the beast way to modify areas in a World (replacea Ton of blocks)
prefabs or via the BuilderTools plugin
Yeah I would assume it would be as simple as that.
[2026/02/21 20:49:13 WARN] [EntityRefSystem] Added Entity with uuid: 0657d10b-d53b-3ca4-ae10-1e9eafb422c7
Yay. got my own list of all entity uuids i can track. Wooo. woo... wo... ...
What is the most comprehensive Essentials plugin currently available?
does someone know how you can load a machinima "cutscene" via plugin?
What points weapons or items in hand to attach to R-Attachment? Trying to see if I can shift that up to shoulder level instead, or more
Chest armour allows for armour assigned to multiple bones to be separately attached to and animated with the body (shoulder, chest, belly, pelvis), would love to bring that to weapons as well
Does anyone know if there is any async player pre login event planned or way to achieve that currently? Because Ill have to freeze the players waiting for the data to be fetched
To-do rank up system do you all use just Luckperms plugin or also other plugins?
Is there an confirmation if there would be an big official mmo mode to the "mini" games in hytale would be insane?
maybe with an own story line own bosses and so on
They'll have an official minigame server, but have said nothing about an mmo. I think it's unrealistic
leave that to third parties, they're already cooking
Essentials Plus or Elite Essentials for server?
hytale has been out for a month, so all these mods are new... and have yet to build a reputation.
So in my opinion, I'd most likely just write my own stuff rather than relying on others' plugins.
It would suck to download a bunch, and then said plugins get abandoned
(see this all the time in the MC community for newer stuff lately)
Cool if you get hands on plugin, better if source code is provided lol
Which is usually not unfortunately so better to create you own plugins
i like to create my own stuff, so i dont have to rely on others, and i get what i want (or hopefully get it 😂 )
Obviously everyone is different.
i tend to do the same
Yo chat, I'm working on a project and we need a coder
So if u like Ben 10 send a dm
and it only took me like a week to update my server lmao
i havent had anything break yet.... knock on wood.
But i havent creatd any custom stuff (assets)... just commands and simple event handlers
Can I append an item to Kweebec_Merchant's trades without having to override the entire asset? Would much rather just append to avoid overriding another plugins potential trades?
I am still trying to figure out why my asset pack has disappeared from the asset editor after the latest version and there are some things that pop up in the console that i can't quite figure out if it is a problem or not. I can't pastebin here, can i get someone to have a look for me who is exponentially more intelligent than me xD
but like things like:
[2026/02/21 23:31:12 WARN] [RangeValidator] Can't handle: string as a range: com.hypixel.hytale.codec.schema.config.StringSchema@36e4272a
[2026/02/21 23:31:12 WARN] [RangeValidator] Can't handle: min is not a Number: PT0S, class java.time.Duration
[2026/02/21 23:31:12 WARN] [RangeValidator] Can't handle: string as a range: com.hypixel.hytale.codec.schema.config.StringSchema@9c72a60f
[2026/02/21 23:31:12 WARN] [EqualValidator] Cannot compare class java.lang.Float with class com.hypixel.hytale.codec.schema.config.StringSchema
[2026/02/21 23:31:12 WARN] [RangeValidator] Can't handle: string as a range: com.hypixel.hytale.codec.schema.config.StringSchema@36e4272a
Is there something in my assets that are breaking it?
😮 the plugin is no longer being loaded, i tried loading it through: /plugin manage and i get the following error:
However i do have it as a dependency o.0
[2026/02/21 23:46:48 SEVERE] [PluginManager] HySprinklers:HySprinklers is lacking dependency AssetEditor at stage SETUP
[2026/02/21 23:46:48 SEVERE] [PluginManager] HySprinklers:HySprinklers DISABLED!
manifest.json
{
"Group": "${plugin_group}",
"Name": "${plugin_name}",
"Version": "${plugin_version}",
"Description": "${plugin_description}",
"Authors": [
{
"Name": "${plugin_author}"
}
],
"Website": "${plugin_website}",
"ServerVersion": "${server_version}",
"Dependencies": {
"Hytale:AssetEditor": "*",
"Hytale:EntityModule": "*",
"Hytale:BlockModule": "*"
},
"OptionalDependencies": {},
"DisabledByDefault": false,
"IncludesAssetPack": true,
"Main": "${plugin_main_entrypoint}"
}
did i do this wrong?
Does anyone know why "Primary" and "Secondary" interactions aren't working? "Use" interaction works fine
store.putComponent(ref, Interactable.getComponentType(), Interactable.INSTANCE);
Interactions interactions = new Interactions();
interactions.setInteractionId(InteractionType.Use, "UseNPC");
interactions.setInteractionId(InteractionType.Secondary, "UseNPC");
interactions.setInteractionId(InteractionType.Primary, "UseNPC");
store.putComponent(ref, Interactions.getComponentType(), interactions);```
public class NPCInteractAction extends SimpleInteraction {
public static final BuilderCodec<NPCInteractAction> CODEC = BuilderCodec.builder(NPCInteractAction.class, NPCInteractAction::new).build();
public NPCInteractAction() {
super("NPCInteraction");
}
@Override
public void handle(@NonNullDecl Ref<EntityStore> pRef, boolean firstRun, float time, @NonNullDecl InteractionType type, @NonNullDecl InteractionContext context) {
if (type != InteractionType.Primary && type != InteractionType.Secondary && type != InteractionType.Use) {
return;
}
PlayerRef playerRef = context.getCommandBuffer().getComponent(pRef, PlayerRef.getComponentType());
if (playerRef == null) {
return;
}
UUIDComponent uuidComponent = context.getCommandBuffer().getComponent(context.getTargetEntity(), UUIDComponent.getComponentType());
if (uuidComponent == null) {
return;
}
List<CitizenData> citizens = HyCitizensPlugin.get().getCitizensManager().getAllCitizens();
for (CitizenData citizen : citizens) {
if (citizen.getSpawnedUUID() == null || !citizen.getSpawnedUUID().equals(uuidComponent.getUuid())) {
continue;
}
if (type == InteractionType.Use && !citizen.getFKeyInteractionEnabled()) {
break;
}
CitizenInteraction.handleInteraction(citizen, playerRef);
break;
}
super.handle(pRef, firstRun, time, type, context);
}
}```
@kind osprey Were you able to solve the problem?
Anyone know if its possible to change the scale of images within UI files to use nearest neighbor instead of bilinear? So that pixel art doesnt look blurry?
Nope 😩
Has anyone found where you add your custom Icon for the new interface in the pre-release version?
i think only use works in interactiontypes
What do you mean?
in interactiontype.x only use works
Are there any other solutions?
Alright, thanks!
I have an implementation that detects the use of hoes through listening to a packet
does syncinteractionchains work with primary and second
if you need something, you can listen for SyncInteractionChains and then decode what has been used. Inside it has an interaction type that can be compared to InteractionType for things like primary, secondary, dodge etc...
yes, i use it to first detect if its a secondary interaction, but then i had to further check the item in hand from Inventory to check if it was a hoe
Interesting... But how would I know if the player is trying interact with an NPC?
or in essence, i skipped that step and for my use case, checked to see if the block had become a farmland or not, but that its due to the niche of myh mod
ohh i cann only assume - without testing anything so dont take this as fact - but i would assume you could check for InteractionType.Use and then maybe a raycast to see if it hit the entity you were looking for? Compare it to whatever NPC you're looking for, if it hits, get the component and execute whatever you need from there, if that makes sense?
That is what I was thinking, but I have no idea how to raycast in Hytale
which i would execute inside of this for thread safety
world.execute( () -> {
// Code here
})
yeah im unsure either. I would probably look inside of TargetUtil ?
you could get SyncInteractionChain.data.entityId to check if its entity and you can check if its your npc with a component
This is possible for sure
I'll try that out, thanks
np
Anyone know what im doing wrong here ? I have added Hytale:AssetEditor as a dependency but im getting an error that it is lacking the dependency at stage setup ?
with raycastselector its very easy to do use
try with optional or both
tried, doesn't work. It seems that when i load the AssetEditor, it unloads my plugin without giving me any real error and then when i try to re-enable it through /plugin manage , it gives me the error that it doesn't have the dependency at setup
Has there been any changes with this release in regards to the asset editor? Is it still bundled with the server or has it been attached elsewhere? I'm thinking ridiculous now ig
I wonder if anything like the server version check for asset packs have created issues with asset pack creation and the such
Added mod enable and disable support from UserData/Saves/<save>/mods
Added server version checks for plugins and asset packs
Newly created asset packs are now enabled by default
Added option to skip mod validation in single player
Mod validation issues now block server startup unless flagged
Added a warning when loading into worlds with missing mods
Added duplicate plugin detection warnings
they did add new things to node editor but i dont think that would affect it
tbh i might just have to create a whole new project from scratch and port everything over -.-
i can only assume that there might be some form of corruption that might have happened, invalidating the assetpack and thus creating issues now. I really dont know
why you need in that in manifest anyway
is something gets disabled when you remove that
The whole plugin gets disabled and can't be loaded after the asset editor is opened:
[2026/02/21 23:46:48 SEVERE] [PluginManager] HySprinklers:HySprinklers DISABLED!```
do i need to add the asset editor as a dependency to the whole damn project? if so how the helly do i do that
I don't have the time nor energy to be recreating this damn project for it to potentially break again with a future update though x_x I get that it is early access so i might just hold off developing for a while
you just add the AssetEditor in the manifest file
Unless i did that wrong...
which i am unsure what part of that would be wrong but if i did the dependency wrong then that would make sense. Unsure if i need to target a specific version of the asset editor, only problem is that i don't know what the version would be to target it to test if thats a problem. Only inconsistency is that the other dependencies are doing their job, so * is working for those dependencies soooo idk
oh well then i sadly dont know
been kinda trying to fix this for 2 days and im feeling fairly defeated lols. So i might just put developing mods for hytale of pause for a bit xD
Do you have any idea how to get the entity ref from the entity ID or get the ID from an entity's ref?
I'm not familiar with using the AssetEditor as a dependency, but are you able to just not do anything related to the AssetEditor during plugin setup? Or will that still require setting it as a dependency?
The problem is that this version has made the assetpack created by my plugin disappear in the asset editor. So i cannot edit any of it. Then when i use /plugin manage to disable it and re-enable it, it breaks and cannot be re-enabled due to the error above about it not having it as a dependency at stage SETUP
Ah hmm
Maybe you need to register the dependency a different way? I do have a horrible memory, so I could be wrong, but I don't think this is the message that usually shows up when a dependency is missing from the manifest file
But like I said, I've never messed with depending on internal features like that, so I have no idea
@kind osprey Do you have any idea on how to do this?
Ermm i can imaging so. One sec let me find out what i did, my memory is terrible
@acoustic shuttle
Let me prefice that i am very hacky, i will just figure out a way that works and if it works.... it works... I dont try to find the quote "best"
PlayerRef playerRef = Universe.get().getPlayer(packetHandler.getAuth().getUuid());
Ref<EntityStore> entityRef = playerRef.getReference();
if (entityRef == null || !entityRef.isValid()) {
return;
}
Store<EntityStore> store = entityRef.getStore();
World world = store.getExternalData().getWorld();
That's not what I need 😬
OHHHHH
I read that wrong my bad, give me one min. I am sure i also did this one second
syncInteractionChain.data.entityId returns the entity's ID. For the entity I'm comparing against, I have it's ref
No worries
you can get id from a ref but i dont think about the same about reverse
I can only figure out how to get the index, but it seems to be a different value?
I think you can get it, i have just... forgot. Give me a moment and i will see what i can do.
public Ref<EntityStore> getRefFromNetworkId(int networkId) {
return (Ref)this.networkIdToRef.get(networkId);
}
i think this should work?
Try this?
PlayerRef playerRef = Universe.get().getPlayer(packetHandler.getAuth().getUuid());
Ref<EntityStore> entityRef = playerRef.getReference();
Store<EntityStore> store = entityRef.getStore();
store.getExternalData().getRefFromNetworkId();
Let me test this out
Give it a go, make sure to validate it so it doesn't end up being null x#D
Haha yeah will do
This works!
Thanks
Unfortunately this doesn't seem to work with right clicks. Any ideas?
@Override
public void accept(PacketHandler packetHandler, Packet packet) {
if (!(packet instanceof SyncInteractionChains interactionChains)) {
return;
}
try {
SyncInteractionChain[] updates = interactionChains.updates;
if (packetHandler.getAuth() == null)
return;
// Get player from packet handler
UUID playerUuid = packetHandler.getAuth().getUuid();
PlayerRef playerRef = Universe.get().getPlayer(playerUuid);
if (playerRef == null || !playerRef.isValid()) {
return;
}
World world = Universe.get().getWorld(playerRef.getWorldUuid());
if (world == null) {
return;
}
// Process each interaction
world.execute(() -> {
for (SyncInteractionChain chain : updates) {
handleInteraction(playerRef, chain);
}
});
} catch (Exception e) {
getLogger().atWarning().withCause(e).log("Error handling player interaction");
}
}```
private void handleInteraction(@Nonnull PlayerRef playerRef, @Nonnull SyncInteractionChain chain) {
InteractionType type = chain.interactionType;
if (type != InteractionType.Use && type != InteractionType.Secondary && type != InteractionType.Primary) {
return;
}
if (chain.data == null) {
return;
}
if (!checkCooldown(playerRef.getUuid())) {
return;
}
Store<EntityStore> store = playerRef.getReference().getStore();
Ref<EntityStore> entity = store.getExternalData().getRefFromNetworkId(chain.data.entityId);
if (entity == null) {
return;
}
List<CitizenData> citizens = HyCitizensPlugin.get().getCitizensManager().getAllCitizens();
for (CitizenData citizen : citizens) {
if (citizen.getNpcRef() != null && citizen.getNpcRef().isValid() && citizen.getNpcRef().getIndex() != entity.getIndex()) {
continue;
}
if (type == InteractionType.Use && !citizen.getFKeyInteractionEnabled()) {
break;
}
CitizenInteraction.handleInteraction(citizen, playerRef);
break;
}
}```
It looks like right clicking with an empty hand doesn't send an interaction packet
Hmm i haven't really tested without an item in hand i dont think but that doesn't seem to be intentional. I cant look right now considering my plugin debacle
Also side note why type != InteractionType.Use && type != InteractionType.Secondary && type != InteractionType.Primary ? Surely you want to use || instead of && ?
I'm guessing it was a design decision since they are trying to standardize using "F" for interactions. I doubt there's really a workaround, but I did send a report to Hytale regarding this
But then I would have to nest the code in the if statement's body which gets messy
If you're looking for any and all interactions of InteractionType.use || InteractionType.Secondary || InteractionType.Primary ?
It will always return because the interaction type will never be all three at the same time?
The easiest but most primitive:
boolean isCorrectInteraction = false;
if (type != InteractionType.Use && !isCorrectInteraction) {isCorrectInteraction = true};
if (type != InteractionType.Secondary && !isCorrectInteraction) {isCorrectInteraction = true};
if (type != InteractionType.Primary && !isCorrectInteraction) {isCorrectInteraction = true};
if(!isCorrectInteraction) return;
// continue with code
Easily cleaned up with.
Or I could do the exact same thing with less code using this haha
Im sleepy so i might be reading wrong, you're probably right. XD
Anyway, thanks for your help!!
goodge luck
Sidenote, does it send an interaction packet with primary or use with an open hand?
Yes it does
Although that's because the player can attack with an empty hand, and they designed it to be able to interact with Use with an empty hand
weirdge
In the vanilla game, there's nothing that requires Right Click interactions without an item in hand, so I guess they didn't bother sending a packet
i guess also the design choice for coherency is to only interact npcs with the Use keybind right?
Yep. Having the option is still nice though
Agreed. To be honest though, alot of stuff is implemented but incomplete, the interaction event itself being mostly useless right now.
Makes our lives hard for sure. I wonder through the power of reflection, if we could hack together a solution for that thought
Yeah, I'm not sure how they messed that up haha
We could always just create our own interaction event which uses packets in the backend, I mean, that's how Hytale handles events. They're pretty much just wrappers over listening to packets
Oops, I just corrupted my world by giving NPCs an interaction, then later removing the interaction .json to replace it with my new interaction system... lol
Agreed although we would essentially need to listen to packets and parse them. I am wondering if the client itself manages whether to send the packetyy or not, or if the server checks instead and filters it out.
Yeah, the server likely has no control over what packets the client sends
If the client filters it and just doesn't send the packet, i dont think a plugin would be able to do that and make it out of thin air
Haha, no it wouldn't be possible, which is why I sent a report to Hytale. Now what are the chances they will implement it any time soon? Highly unlikely 🙂
Doesn't Kaupenjoe manage those? If so, its highly likely he will put it on their radar considering he is the ambassador for hytale modding and manages the modding trello
I have no idea
I just checked, and the server doesn't appear to be filtering the packet. I don't see why it would anyway since the packet would already be sent which would be wasting bandwidth if it's not used
I mean, I did report an issue when creating an NPC using the "Player" model, it could corrupt worlds and break the chunk. It's been a few weeks and still no news on that 😐
It does take time to be fair, and that is probably lower on their list considering their current focus is still mainly on the content within the game with smaller less breaking updates to modding
Its a one line mistake which breaks chunks and causes world corruption... lol
I dont think game development and bug fixing really works like that in a production setting. Maybe in our world but probably not in theirs haha
It's literally a one line mistake in the server.jar haha
More specifically, a "0" that needs to be changed to a "1"
xDD I highly suggest making kaupenjoe aware, im pretty sure he is the best shot ? idk
That's too much effort. I already submitted a bug report, and found a workaround, so I'm happy
dw when devs fix that bug they'll rename a thousand ids and functions so all the mods break anyway :p
idk why the instancing updates to this last release made it in, the thing is even more unstable than before attm D:
Which instancing updates are you referring to?
memory leak, prefab issue,more frequent players getting DC'd and instances failing
server is all nice and dandy until peeps start playing in instances then it's disconnects here, pls refund the portal key the instance kicked us mid-run, etc D:
Oh haha, well I guess that's what you get when you play on a game in early access
now I get why dungeon mods started putting up warnings about how unstable this last update is
I added a refund on keys for the upcoming pre-release if there's an error while the portal is initializing, but not for 'DCing mid-fragment' yet. To do so we'd need something like the stash or lost & found in SkyBlock.
Which server do you own?
is there a way to use i18n params in descriptions?
items.foo.description = {a, select, true {{b}} false {{c}}} would be super handy for dealing with custom properties.
Message.translation().param() for when I'm dealing with it on my own, but in the description tooltips is what I'd like to see this in
He works on Hypixel's SkyBlock and other Hypixel related stuff
Good day! For some reason, when I open the UI for the player after they connect, they can't type in the TextField. They have to press ESC twice to be able to type. How can I solve this issue?
how can i get the Player object in the PlayerDisconnectEvent ? ( I will clear the Player inventory on Disconnect )
I know you can get Store<ChunkStore> From World instance but is there a way around? In EntityTickingSystem i want to get world from my chunkStore so i can spawn particle during tick
Whats the proper way to get the world ?
public class DamageSystem extends DamageEventSystem {
@Override
public SystemGroup<EntityStore> getGroup() {
return DamageModule.get().getFilterDamageGroup();
}
@Override
public void handle(
int index,
@Nonnull ArchetypeChunk<EntityStore> archetypeChunk,
@Nonnull Store<EntityStore> store,
@Nonnull CommandBuffer<EntityStore> commandBuffer,
@Nonnull Damage damage
)
{
if (damage.isCancelled() || damage.getAmount() <= 0) return;
var entityStore = archetypeChunk.getReferenceTo(index);
In your case I think you can do this:
Player playerComponent = (Player)commandBuffer.getComponent(ref, Player.getComponentType());
var world = playerComponent.getWorld()
I see Thanks! Is it possible to not go through the player itself? Since i for example a mob might deal damage and id need to get the world that the mob is in
Not sure, just writing from memory on the phone, maybe you just need entity ref and try getting world from entity
Mhh, isnt there like a component or something i could get to see in which world the damage occured?
it will always be from the current world the entity is in (unless we count DoT but afaik you can't know for that at this time)
Anyone here worked with prefabs and could tell me if there's a way to store custom block component data (like stuff set in block UI) in prefabs?
Does anyone know how to set max health?
for a Player or an NPC?
Nevermind, I think I figured it out. Thanks.
Have anyone started to make any component library for the Custom UI? I know the common have default elements we can use.
But it seems like it could be a early on popular dependency project of some kind, then again there where changes coming to the ui right, some XAML built version like in SS14?
Sidenote, does the common UI elemenets contain or is there an easy setup to create a UITree, you know expandable collapsable nodes etc.
I assume not, just hopeful that i missed it. ^^
You can also do: World world = store.getExternalData().getWorld()
Yess Thank you so much! THat was what i was looking for
Hello, I'm currently doing some "basic" things at UI Pages and whenever I want to append to the CODEC data as a boolean it only gives me the option of sending a string, so it would make sense and work if I do this?
.append("ReloadAll", "true")```
Not sure, but I'm going to test it out...
dunno tbh, but don't forget: the ui system will get an update with an external ui editor at some point in the future (thats why i personaly wait on UI optimization)
Im cooked Failed to apply CustomUI event bindings
There are web editors that generate the .ui file
But there are also libraries such as HyUI or ReactiveUI
Try HyUI. They have very cool features and started as a java-wrapper around the default ui elements. After that they create a html parser, so you can write html instead of the default ui markup. Checkout their github. Just google and the first link is their curseforge project.
Dang, you were faster 😛
Do you have Diagnostics mode enabled in your client settings?
probably not, you recommend me to read the client logs, right?
nah uh
There is an option that gives you a slightly more specific reason when you get kicked from the server
In your settings
I mean you could. But first of all enable this Settings -> General -> All the way to the bottom -> Diagnostics Mode -> On
Already fixed that little problem. Was just the selector
"Use Alternative Network Stack"?? I saw an enum inside the server source, which mentioned TCP and QUIC, but now there's also a client-setting? 🤯
Unexpected character: 22, '"' expected 'true' or 'false'!
Alright, how to append a boolean? Should I create my own class of EventData for building a String as Key and Boolean as Value? I'm confused
I will try just to create a constructor... Should do I thing
What are you doing exactly? The thing you posted earlier? Could you post the whole codec?
I want to append to my EventData a boolean just to know If the user has clicked a "reloadAll" button so I can do X instead of an "Instance reload"
The thing is the append method of com.hypixel.hytale.server.core.ui.builder.EventData only permits me to append String key, String value
I'm doing it wrong, probably I just need to declare a constructor and do a new instance by the constructor
Try this:
CODEC.addField(
new KeyedCodec<>("ReloadAll", Codec.BOOLEAN),
(object, value) -> object.value = value,
(object) -> object.value
)
Or as lambda:
CODEC.addField(
new KeyedCodec<>("ReloadAll", Codec.BOOLEAN),
YourObject::setValue,
YourObject::getValue
)
I resolved my problem... I was using the EventData Class of Hytale instead mine, I named it same "EventData"
.append("ReloadAll", true)```
Happens, dw 😄
Better call it ReloadEventData 😅😂
Anyone ever get this error I dont know if it's a plugin doing but it happens every so often
[2026/02/22 11:08:37 SEVERE] [Hytale] Exception in thread Thread[#141,WorldThread - default,5,InnocuousForkJoinWorkerThreadGroup]:
java.util.concurrent.CompletionException: java.nio.file.AccessDeniedException: universe\worlds\default\resources\ReputationData.json -> universe\worlds\default\resources\ReputationData.json.bak
at java.base/java.util.concurrent.CompletableFuture.wrapInCompletionException(CompletableFuture.java:323)
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:359)
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:364)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1828)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1817)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:511)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1450)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2019)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:187)
Caused by: java.nio.file.AccessDeniedException: universe\worlds\default\resources\ReputationData.json -> universe\worlds\default\resources\ReputationData.json.bak
at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:89)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
at java.base/sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:310)
at java.base/sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
cant even paste the rest it thinks im adveritsing 😭 cause of the com.hypixel.server
Change the . For - that’s what most of us does
Flagging those as links tho is wild haha
lol ik too funny
There’s a file mentioned multiple times though
Reputation.json.bak corrupted data in the “normal” one ?
yeah i do see that but idk why that file
the file literally just says
{
"Stats": {}
}
You don't have it open in a text editor while it's trying to move it, right?
yeah nah i was just afk and it did that
Interesting
1 st timed it happened
What I clearly understand though is that
java.nio.file.AccessDeniedException: universe\worlds\default\resources\ReputationData.json -> universe\worlds\default\resources\ReputationData.json.bak
This is what your server is trying to do but your windows block that action somehow
yeah codex said it could be a antivirus/windows defender
Most likely cause: external file lock (Defender/AV, backup/sync, indexer, editor/tool) while Hytale core was saving.
it checked all my mods and plugins to see if anything even access that and no which makes sense none of my mods would have a need to
Doesn’t seem like a mods but a server action to create backups files
yeah i dont have any backup scripts running either or mods
Locally hosted ?
yeah this is my test server
Try to restart your pc and see if that’s still blocking atp
Is there any event that cancels mob spawning in the world?
Does anyone know if there is any async player pre login event planned or way to achieve that currently?
Yeah I saw that, probably going to set up something similar to output hytale ui from java, either if i can use direct functions and just return that instead of a resource file, or if its not possible, with some kinde of (source) generator.
But it won't go html, since the there is an additional layer of interpretation, and pretending that it is full html just add expectations that probably won't be possible to deliver. I rather they keep the track of having xaml or some other defined format thats been used in uis that doesn't at the same time have a underlaying expectations of the features.
Same probably with any kind of libraries that aim to replace be their own thing drifting to far from the root structure of the server implementation, since the chance of it breaking with updates becomes two or three points of failiure instead of just the connection towards the base systems and my code. External tools sounds interesting.
You can inline generated documents using UICommandBuilder#appendInline or smth. No resource files or asset files needed. BUT a .UI file for opening a Page is required AFAIK. You basically provide a blank "Root" .UI File with just an empty Group element, generated the document based on the UI elements of the java api and then inline them to your blank root ui.
I wanted to create a lib as well, but im not sure if it's worth, because of the switch to noesis.
If you want to continue your throughts and need some more documentation, check out hytalemodding docs. There's the official UI documentation posted 🙂
when i create an asset on my testserver using asset editor, but the testserver runs from intellij using HytaleServer.jar, where do i find the Mods folder so i can delete the asset? its making me unable to launch the server rn so i cant go back into asset editor
yeehaw, my heightmap import mod works. except for the translations and a few rendering bugs whilst the place clipboard brush is selected, probably a client side bug
@sterile forum @neat pelican thanks so much for all the help with the client getting kicked with my custom block and stuff i found the issue after over like 6h of trial and error and giving up multiple times
my clone method returned null instead of "new decayBlock" ffs
my function now works properly, however I have an issue with the values I set for a block in the asset editor / json file dont get imported into the block i place
Ah that's a sneaky one
i can report the program works fully as intended when hardcoding in the values:
generator.setTicksUntilDecay(120);```
block will be replaced perfectly
I had a similar thing where I spent hours debugging my custom asset where the getID() function returned a hard coded empty string 🤦♂️
i had that error at some point when i learned codecs but it threw an error luckily
I currently have the problem that i have tried to figure out the gradle setup and what it does, I am not sure anymore what project folder compiles, or not. ^^
well to figure out of it compiles or not is easy, but the version i was sure i was running was lacking the logic to specifiy the asset file. ^^
ah probably just forgot to set add assetsdependency
And now that i keep mixing up guid and uuid when typing. 😄
What points weapons or items in hand to attach to R-Attachment? Trying to see if I can shift that up to shoulder level instead, or more
Chest armour allows for armour assigned to multiple bones to be separately attached to and animated with the body (shoulder, chest, belly, pelvis), would love to bring that to weapons as well
The armor pieces and up in place i think, because the block bench model layout defines the hierarchy of the object they attach to, already with correct offsets and bones named.
while i think items in hand end up there by a different route since with those the majority should probably draw relative to the hand with the item at zero. To not have to offset every single block in the game that you might hold. Not sure. But if they can be offset its certainly a base item attribute somewhere.
Does anyone know what's up with the fog this update?
Players exploring around are dealing with vast amount of fog, wasn't like this before this update, and this is happening on chunks that were already pregen.... So why all the fog??
My problem is what happens in blockbench stays in blockbench. It'll correctly inherit bone hierarchy there, but in game it only reflects R-Attachment and nothing else
Seems all this fog is client-side because the server viewradius is 32, but the clients ain't getting that unless they like... stand still
Have you had more success with that?
if you would open a model file from the assets. Like the battleaxe/Adamintite.blockymodel.
you can read
"nodes": [
{
"id": "9",
"name": "R-Attachment",
"position": {
"x": 0,
"y": 33,
"z": 0
},
that would be the definition of the object to be relative to R-Attachement bone i am kinda sure.
by opening different armor and items in blockbench or text editor you can probably figure out the name of the other nodes, if they are viable or not.
replacing it with "name": "Head",
would probably give a fair chance of the axe sticking out of the players head instead when equiped.
if there are not other overrides taking part of hard expectations in the client or server otherwise that certain nodes can be found for certain item types.
Ah. If you have changed it there is probably other logic overriding it, probably have to do with changing hands etc
Whats the proper way to disable building and such in a world or instance? Is that possible or a plugin required for it?
Like Blocking building, dealing or receiving damage and so on?
i did it like this, i dont know if its the best way tho
public class PlayerBlockPlaceSystem extends EntityEventSystem<EntityStore, PlaceBlockEvent> {
public PlayerBlockPlaceSystem() {
super(PlaceBlockEvent.class);
}
@Override
public void handle(
int index,
@Nonnull ArchetypeChunk<EntityStore> chunk,
@Nonnull Store<EntityStore> store,
@Nonnull CommandBuffer<EntityStore> buffer,
@Nonnull PlaceBlockEvent event
) {
event.setCancelled(true);
}
@Override
public Query<EntityStore> getQuery() {
return Query.any();
}
}
public class PlayerBlockDamageSystem extends EntityEventSystem<EntityStore, DamageBlockEvent> {
public PlayerBlockDamageSystem() {
super(DamageBlockEvent.class);
}
@Override
public void handle(
int index,
@Nonnull ArchetypeChunk<EntityStore> chunk,
@Nonnull Store<EntityStore> store,
@Nonnull CommandBuffer<EntityStore> buffer,
@Nonnull DamageBlockEvent event
) {
event.setCancelled(true);
}
@Override
public Query<EntityStore> getQuery() {
return Query.any();
}
}
public class PlayerBlockBreakSystem extends EntityEventSystem<EntityStore, BreakBlockEvent> {
public PlayerBlockBreakSystem() {
super(BreakBlockEvent.class);
}
@Override
public void handle(
int index,
@Nonnull ArchetypeChunk<EntityStore> chunk,
@Nonnull Store<EntityStore> store,
@Nonnull CommandBuffer<EntityStore> buffer,
@Nonnull BreakBlockEvent event
) {
event.setCancelled(true);
}
@Override
public Query<EntityStore> getQuery() {
return Query.any();
}
}
Ok so you did that yourself ? I see
BTW how do i set the death config inside the worldconfig Via Code?
I couldnt find a way besides like actually writing in manually to the config.json
guys, does anyone knows why did configs become broken after the update?
Id: CustomSpawnDeployableInteraction
Path: D:\Hytale local server\mods\ExtractionRPG.rpg\Server\Item\Interactions\CustomSpawnDeployableInteraction.json
Key: Config
Results:
FAIL: Can't be null!```
Sounds like it needs a "Config" object now
commandBuffer.addComponent(ref, RegenBlock.getComponentType(), regenBlockComponent);
worldChunk.setTicking(x,y,z, true);
LOGGER.atInfo().log("New RegenBlock added at [" + x + " " + y + " " + z + "]");```
This is in an onEntityRemove function, the code works and places the block specified in regenBlockComponent at the position the block was just broken to trigger this code to run.
My goal now is to attach the RegenBlock component that the old block had onto the new one that was placed, but i think the ref cannot be used as its for the old block, not the new.
Anyone know how i can get the ref from the new block just placed?
and you have checked so there is no getBlock function for world?
i did not know thats a thing ty
there is getBlock (int) and getBlockType (BlockType)
how do i detect shift key press?
Recently just learned that mods can have a icon called icon-256.png, where does this normally live in a mod jar?
probably doesn't probably live in the mods assetfile.
I figured.. just cant find a dang mod/plugin that utilizes that feature for some reason haha.
What is the name of the element in the Hytale API responsible for the notifications that appear in the lower right corner after, for example, raising an object?
Also, how are we using mod vs plugin nomenclature? I am working on a server manager and I currently have everything listed under "Mods" but it just feels wrong coming from Minecraft, haha. I believe we could seperate out the folders with startup arguments but not sure if it's worth.
NotificationUtil.sendNotification()
"Mods" is the umbrella term for two types of game modifications:
- Plugins (Java .jar files)
- Asset Packs, or just Packs for short (textures, models, sounds, behavior definitions in .json files, etc)
Mods may consist only of a Plugin (mechanic changes, commands, QoL, etc.), only of a Pack (new blcoks, mobs, cosmetics, etc.), or both!
Yep that's what I gathered, thanks
is there a way to detect space key and shirft ?
anyone heard or seen someone having a problem where players are losing their items stored in basegame chests?
how can i turn the index of a block into the blocks entity
My guy, my dude, my fellow moder. You really need to put time into learning how to search the HytaleServer.jar for functions and names.
skipping the basics sounds like something i would do
i have one player trying to join my server, and keeps reporting that the only error hes getting is, failed to load customUI, any one know how to trouble shoot this, as everyone else is on the server and has no issues
i deleted his save file on the server and was able to connect for a few hours before getting that error again
you’ll probably get more traction in #community-help this channel is for discussing the creation of server mods/plugins
ehh community helps more for base game though, and i have about 68 mods made into it lol, was more wondering if MultiHud is running correctly still with the new updates
ill give it a try though
where is he seeing the error? probably need to dive into client logs assuming it’s an issue on his end and not the server
i mean they said nothing specific about the mini games nothing is confirmed but also nothing is not confirmed
They specifically said "minigames". They did not say "MMO". But be realistic, lol. A first-party MMO is way out of scope
If i call blocks.forEachTicking i get local X,Y and Z, how can i transform that to global ?
There are block and chunk util functions that I think can help, also by getting the chunk in question i think you can get that in world, and then its just adding x,y,z.
yeah, ChunkUtil has those conversion functions
Great thanks
Hi guys do you know how to cancel wheather change events?
Yup, totally not agreeing for personal reasons but leave the MMO stuff to third-party creators.
Hey guys, i think i found something suspicious in a mod i was looking at tweaking a bit on CurseForge and i need someone with a bit more knowledge able to confirm. but this one mod called "RPGLeveling" has classes in it that refer to all kinds of WindowsAccount authentication, Domain, Identity and Security. These DO NOT sound like something that is typical with a mod and need confirmation if this absolutely needs to be dealt with
that sounds suspicious, i would report it to curseforge
Yeah. It was just a question of time before it would start or be a case.
As soon as you have source level mods, people will realize there is some way to insert trojans or other malware trough it.
yeah, it was very sus, i opened it in Intellij to decompile the class and it was not looking good
And since people don't validate and just accept that everything should be fine, they install anything. ^^
Cities Skylines 2 had its fair share of cryto wallet stealers.
I checked it out. They include waffle (Windows Authentication Framework) stubs in the jar which is part of the database client. There is nothing to worry about, the actual code doesn't use it at all
Well glad thats the case.
It's just included as part of the database driver. They could have cleaned it up when building the jar, but it's just a missing optimization, not anything malicious or harmful
hm, got it thanks for the info
Good vigilance though!
Hytale entering the hypixel skyblock mod experience earlier than i thought
I should be able to find this in the documentation i think, but I don't.
I have a SplitPageView UI containing two groups #LeftView and #RightView, that both in turn contain a group called Content.
I would include it like commonUI but with a relative path to the ui file its used in.
$CommonUI = "../Common.ui";
$SplitView = "./SplitView.ui";
To add it i I would add it the same way as with a common ui declared
$SplitView.@SplitPageLayout #SplitPage;
How would I append data at this depth to the #SplitPage.LeftView.Content
is it with a #SplitPage.@LeftView.@Content {}
...
Is it possible to somehow remove the block animation using a custom block component?
yo nice, i got my hytale server running on it's own hyper v vm on my network instead of wsl. using way more ram now lol
It is probably the operating system that causes increased RAM demand.
POV: Day 3 of figuring out why my mod deactivates due to something about not having AssetEditor as a dependency. Can i add the AssetEditor as a dependency for the whole mod and not just in the manifest?
.... yes, wsl allocates itself a decent chunk and on top of that is unstable if i tried to allocate it anymore than 16gbs of ram. now i'm able to nearly double that running it on a plain hyper v vm. it's just nice and i'm experessing that
In your dream, what do you want to do? Because I don't really understand your problem.
Hi i am work with the UI a lot
but i cant get a pop up thing to work like a UI on top of another UI like a popup ?
any idea on how to do it
the hack i come with is to visable false the old up and show the next one
private void onPlayerJoinWorld(AddPlayerToWorldEvent event) {
event.setBroadcastJoinMessage(false);
World spawnWorld = Universe.get().getWorld(
FileConfiguration.getConfig().getSpawnLocationWorld()
);
if (spawnWorld == null) return;
Vector3d spawnPos = new Vector3d(
FileConfiguration.getConfig().getSpawnLocationX(),
FileConfiguration.getConfig().getSpawnLocationY(),
FileConfiguration.getConfig().getSpawnLocationZ()
);
Vector3f spawnRot = new Vector3f(0, 0, 0);
Teleport teleport = new Teleport(
spawnWorld,
spawnPos,
spawnRot
);
event.getHolder().addComponent(
Teleport.getComponentType(),
teleport
);
}
Event fires, how is teleporting meant to be done? Am I missing something?
Is it possible to somehow remove the block animation using a custom block component?
Hello, hello!
I want to set up a server for my class. Hytale seems to manage a lot of things on the server side, so as soon as I have a few people on my server, the TPS drops quickly. My only solution at the moment is to limit the render distance.
I saw that you've done a good job on the optimisations and it's running well 💪.
Have you discovered any tips that you could share with me, please? 🙂
Check out Nitrado's performance-saver plugin. It handles the render distance dynamically so it automatically goes back up when it's able to do it without lag
it's p good yeah, i use that and one other one for performance and they work p well so far. and a low tps isn't exactly bad either. you want stable tps
i am using the optimizer mod indeed, but is it the only thing we can improve to make a 32gb server run more than 6 people wwothout lag ?
improve the cpu or split people up into different worlds
by improve you mean upgrade ? or there are options in JVM, or serverside improvements i can do ?
IF possible yeah i can split people, maybe there is a way to improve multi threading ? idk
nah it's still early days
i get it, thanks !
ok you declare the things you want to be exposed as components with @name and assign the component itself to that.
Does anyone know how to set the max health of an NPC?
I may be late to the party here, but I updated my server and plugins, but I’m still getting a world that all the blocks are invisible. I’ve added the new assets.zip and am still having the issue. Any ideas?
If you create a new world, does it work?
Yes
It sounds like your world got corrupted
get their EntityStatMap component and its in there
Set the MaxHealth in the NPC role.
Any ideas?
It happened to 5 different worlds
can i find some world with full chunk save?
I've checked that. There seems to only be an index for current health though, not max, unless I'm missing something
oh wait, i dont think you can set it.... but you can apply a modifier
I would prefer not to handle this through roles
Hytale doesn't appear to support using modifiers on NPCs.
java.lang.UnsupportedOperationException: Only static modifiers supported on the client currently.
at com.hypixel.hytale.server.core.modules.entitystats.modifier.Modifier.toPacket(Modifier.java:45)
at com.hypixel.hytale.server.core.modules.entitystats.EntityStatMap.addChange(EntityStatMap.java:676)
at com.hypixel.hytale.server.core.modules.entitystats.EntityStatMap.putModifier(EntityStatMap.java:295)
at com.hypixel.hytale.server.core.modules.entitystats.EntityStatMap.putModifier(EntityStatMap.java:267)
at ThirdParty(com.electro:HyCitizens)//com.electro.hycitizens.managers.CitizensManager.applyHealthOverride(CitizensManager.java:1418)
at ThirdParty(com.electro:HyCitizens)//com.electro.hycitizens.managers.CitizensManager.spawnPlayerModelNPC(CitizensManager.java:1382)
at ThirdParty(com.electro:HyCitizens)//com.electro.hycitizens.managers.CitizensManager.spawnCitizenNPC(CitizensManager.java:1220)
at ThirdParty(com.electro:HyCitizens)//com.electro.hycitizens.managers.CitizensManager.lambda$spawnCitizen$1(CitizensManager.java:1190)
at com.hypixel.hytale.server.core.universe.world.World.consumeTaskQueue(World.java:959)
at com.hypixel.hytale.server.core.universe.world.World.tick(World.java:451)
at com.hypixel.hytale.server.core.util.thread.TickingThread.run(TickingThread.java:95)
at java.base/java.lang.Thread.run(Thread.java:1474)```
weird
Maybe I'm doing something wrong?
public void applyHealthOverride(@Nonnull Ref<EntityStore> entityRef, @Nonnull CitizenData citizen) {
if (!citizen.isOverrideHealth()) {
return;
}
Store<EntityStore> entityStore = entityRef.getStore();
EntityStatMap statMap = entityStore.getComponent(entityRef, EntityStatsModule.get().getEntityStatMapComponentType());
if (statMap == null) {
return;
}
int healthIndex = DefaultEntityStatTypes.getHealth();
EntityStatValue healthStat = statMap.get(healthIndex);
if (healthStat == null) {
return;
}
float defaultMaxHealth = healthStat.getMax();
float targetHealth = citizen.getHealthAmount();
float difference = targetHealth - defaultMaxHealth;
Modifier modifier = new Modifier(Modifier.ModifierTarget.MAX) {
@Override
public float apply(float v) {
return v + difference;
}
};
statMap.putModifier(healthIndex, "hycitizens_max_health", modifier);
statMap.setStatValue(DefaultEntityStatTypes.getHealth(), targetHealth);
}```
use StaticModifier
The EntityStatValue for health keeps track of the max. You can use reflection to edit that, or edit it in the underlying asset
via statValue.synchronizeAsset()
Yes. manged to get the splitViewPage working. Next thing will be adding a click event to the list so i can populate specific data in the right side view.
Would you be able to give an example?
The error says static modifers are only supported on the client
yes, so use a StaticModifier as its asking for, rather than the abstract Modifier class
No, I've never done it myself. Just seeing in the code that the max can be changed by calling synchronizeAsset
but your call if editing the base or applying a modifier makes more sense for your use case
How would I change this to use a static modifer?
public void applyHealthOverride(@Nonnull Ref<EntityStore> entityRef, @Nonnull CitizenData citizen) {
if (!citizen.isOverrideHealth()) {
return;
}
Store<EntityStore> entityStore = entityRef.getStore();
EntityStatMap statMap = entityStore.getComponent(entityRef, EntityStatsModule.get().getEntityStatMapComponentType());
if (statMap == null) {
return;
}
int healthIndex = DefaultEntityStatTypes.getHealth();
EntityStatValue healthStat = statMap.get(healthIndex);
if (healthStat == null) {
return;
}
float defaultMaxHealth = healthStat.getMax();
float targetHealth = citizen.getHealthAmount();
float difference = targetHealth - defaultMaxHealth;
Modifier modifier = new Modifier(Modifier.ModifierTarget.MAX) {
@Override
public float apply(float v) {
return v + difference;
}
};
statMap.putModifier(healthIndex, "hycitizens_max_health", modifier);
statMap.setStatValue(DefaultEntityStatTypes.getHealth(), targetHealth);
}```
Modifier modifier = new Modifier(Modifier.ModifierTarget.MAX) {
@Override
public float apply(float v) {
return v + difference;
}
};
Just change this to use the StaticModifier class instead of the Modifier class
exhibit A from my code:
StaticModifier modifier = new StaticModifier(target, type, amount);
Any idea what the CalculationType and amount should be? Or I assume amount is the new health value?
its either ADDITIVE or MULTIPLICATIVE
Whichever suits your needs
you could use add and just add whatever amount you want
I'll try that out, thanks!
You’re welcome
How would I go about creating a new armor slot/type?
Or, alternatively, is there a way to call an item as an attachment and equip that to a player, without overriding the current item in that slot? Simply having a model display while an item is held, essentially
Idea: Having a weapon-item that allows for two different models in each hand, or...
Having a weapon that mutates your arm, or shoulder, making another arm come out (Animations would be handled by current attachment+animation methods, that's the easy part)
Problem: An item or weapon only displays in the R/L-attachment slots, or whatever it's bound to, and will not render onto other nodes without the Render Dual-wielded option, which simply mirrors the held item into the other hand.
Blockbench displays items correctly/intuitively. When imported as an attachment, each object will go to the parent node/bone that it is named after.
In game, weapons deny this and only animate as a single item, and do not render in other nodes unless it is an equipped piece of armour.
by the design any model can have attachments, if those attachments in turn by their own data know if they should attach to the internal specified attachment point or not i do not know.
I guess the best idea would be to read in closer on how they are used in general.
NPCs seems to be built by weighted attachments that can attach parts to different body parts.
So could just be that you need to attach an additional component that does similar logic un realted of the weapon equipped, or make the weapon in hand invisible, and only depend on attachements for the actual visual effects. I haven't dug into it yet. But I will do that when i start with my custom village npcs.
From that idea then, since it does seem to have a default attachments section for ModelAssets, would it be possible to just throw that line into an item/weapon? This is where my experience thins a bit
Can I do 8 rotations for blocks? I made a surprise plush for my wife, and I want her to be able to rotate it in 45 degree increments, so 8 rotations. Or would that have to be 2 separate models where one is rotated 45 deg to start with?
im no expert, but based on what ive seen in the code, for packets... theres only the 4 rotations
(on each axis)
How do I load a model from its path?
For example, how do I get the model from this path:
Blocks/Decorative_Sets/Crude/Chest_Small.blockymodel
I want to replace the player model to this model. But I can't figure out how to get the actual Model of that block through code.
My guess is BlockType.getAssetMap().getAsset("Chest_Small").getCustomModel()
Actually, "getCustomModel" returns this exact String instead of the Model.
Check how violet does it with her plushies mod
Well yeah the model itself is a client asset, not a server asset
The server only uses the id to tell the client to load it in this or this situation
Or I may be misunderstanding something
There is the ModelAsset.getAssetMap() if you are looking for that?
seeing my name out of context for someone else gives me whiplash I swear
It's a sick name. Not surprised it's popular!
Anybody know if there's a way to attach an attachment through an interaction? Only seeing shears as an example, and it goes through contextual use actions, npc and harvest specifically. Would love to do it as an interaction from holding an item
Oh, I see.
So could I just do something like: Player.model.path = "Blocks/Decorative_Sets/Crude/Chest_Small.blockymodel" to replace the player model to this block?
What is Player.model.path?
heyy, since the new update my whole server.lang is broken in my mods..
any known issues?
That was conceptual.
I was just asking if replacing the model path of the player replaces the model?
hmm im having some serialization woes, I have a component with this definition
private String handlerId;
public String getHandlerId() { return handlerId; }
public void setHandlerId(String id) { this.handlerId = id; }
public static final BuilderCodec<Component> CODEC =
BuilderCodec.builder(Component.class, Component::new)
.append(new KeyedCodec<>("HandlerId", Codec.STRING),
((data, value) -> data.handlerId = value),
Component::getHandlerId)
.add()
.build();
And am placing the component on my block via an interaction
Component component = chunkStoreStore.ensureAndGetComponent(
blockRef, Component.getComponentType());
component.setHandlerId(this.handleId);
When I then use the component in my system it all works fine
But if I leave/restart the server and come back it will give me this error in my system
Component component =
chunk.getComponent(entityIndex, Component.getComponentType());
assert (component != null);
if (!component.isStateDirty())
return;
String handlerId = component.getHandlerId();
if (handlerId == null || handlerId.isEmpty()) {
Plugin.LOGGER.atSevere().log(
"Handler not set for component on entity at index %d. Disabling it.",
entityIndex);
component.markClean();
return;
}
So I'm thinking for some reason the handler String is not being saved properly but unsure why
I don't understand the context you're talking about. I don't see any reason for you to interact with the asset pack path unless you're creating an asset pack on the fly and sending it to the client?
I want to replace the player model by a block model.
I got the block model path with 'getCustomModel()".
But I still don't know how to apply it to the player model.
In that case, have you looked at how the game updates the player model from the /model command?
ModelAsset modelAsset = (ModelAsset)this.modelAssetArg.get(context);
float scale = this.scaleArg.provided(context) ? (Float)this.scaleArg.get(context) : modelAsset.generateRandomScale();
if (!this.bypassScaleLimitsFlag.provided(context)) {
scale = MathUtil.clamp(scale, modelAsset.getMinScale(), modelAsset.getMaxScale());
}
Model model = Model.createScaledModel(modelAsset, scale);
store.putComponent(ref, ModelComponent.getComponentType(), new ModelComponent(model));
Yes but I am having difficulties understanding it.
Like, the ModelComponent thing is pretty clear, but everything before that is confusing to me.
- Fetch the ModelAsset from the asset map (
ModelAsset.getAssetMap().getAsset(key)) - optional: Compute scale as necessary
- Create a Model from the ModelAsset and scale
- Create a ModelComponent and assign it to the target entity
Oh I see now, I overcomplicated myself on the scale and could't see that clearly.
Thank you, I should be able to do it now.
ok figured this out so my component is fine but it's that when the chunk gets unloaded for some reason the game doesn't save it so I needed to manually mark thechunk for saving so on load it would load the most up to date state for the component
// Mark chunk as needing to be saved after modifying component
Vector3i position = component.getPosition();
WorldChunk worldChunk = world.getChunkIfInMemory(
ChunkUtil.indexChunkFromBlock(position.x, position.z));
if (worldChunk != null) {
worldChunk.markNeedsSaving();
}
Maybe I made a dumb mistake, but ModelAsset.getAssetMap().getAsset("Chest_Small") return null.
Oh wait, my bad, its "Furniture_Village_Chest_Small" that's why xD
Hmm, still return null, well I guess I got to try things until it works.
Well, I have no idea why it doesn't work. Seems like it's the key which is wrong but no idea why. Or perhaps it's the wrong AssetMap. Idk.
lol they moved server plugins to category and took me time to find it
How would I analyze the code behind an Interaction Type or Context?
I have IntelliJ Idea installed and all
when i use set block how do i set air?
"Empty" is the BlockType
thank you
You’re welcome 🙂
Bro im ngl i just bought supporter cause i thought thats what it meant by verify oh well lol
I just wanted to be able to talk in here again
oops, but also good on ya
right? lol
Simon: "Thank you"
if anything ive reported as issues ever gets fixed... i might bump up to supporter 😂
Anyone know what handles the ghost blocks that spawn in when you're pasting something in creative or how i can interact with those?
Or even just a class related lol
im going to guess theyre client side, but i could be wrong
That would makes sense, would it not still be in the server jar though?
id assume not, if its client only
Well the server jar is the whole game other than assets if im not mistaken
Im probably mistaken
the client (written in C#) is going to handle all the rendering.
So if its client side only, the server wouldnt need it.
(again, im just guessing)
I'm in desperate need for somebody who can code, I promise I've done as much work as is possible of my feeble mind, and anything requested would be minimal I assure you
I want to create a new contextual interaction, so that it can be used to attach an attachment similar how to ContextualUseNPCInteraction does for harvesting sheep
The aim is to create one that isn't based on engaging with an NPC. The trigger is holding an item, and the effect is to add/remove a declared attachment from the player.
I found the ContextualUseNPCInteraction.class in the server.jar, and it seems like the easiest place to start for those with the knack and more than 1 week experience with java
It extends SimpleInstantInteraction.class, which might be easier to work from? idk
Rough layout, working from harvesting sheep with a shear as an example:
"HoldInteractionContext": "PossessedItem",
"HoldInteractionRequiredItems": [
"Weapon_Item_Possessed"
],
"ModelSlots": "Head", "Chest", "R/L-Forearm", etc
"ModelAttachmentEquipped": "Possession",
"ModelAttachmentUnequipped": "",
and separately, under the item itself
"Interactions": [
{
"Type": "HoldItem",
"Context": "PossessedItem"
}
]
I'm trying to figure out how i could automate making a particle out of every single block
Perhaps a termination criteria removing those attachments upon no longer holding the item would be wise as well.
Does anyone know what "key" this function needs?
Is there any information about that?
ModelAsset.getAssetMap().getAsset(String key)
Is anyone here familiar with NPC roles?
I'm having an issue where if I create a role in an asset pack while the server is running, it has no problem loading the role, and hot-reloading it, but once the server restarts, it fails to load the role.
Well, it appears that the role loads, but it fails when an entity uses it
hii, i have a little question for me. Is it possible to import for a custom ui, different images for buttons, change it when the mouse hover it and show a custom tooltip ? (image too)
im a not a devlopper but anyone want to know how my ui work so i need to dev the .ui for him
what exactly are you trying to do?
Have two different weapon models in each hand.
Or have a weapon that corrupts the arm, or has runes that travel up to the back, etc.
Multi-nodal inheritance of appearance from the held item. Currently this is only possible through equipping the item, like armor.
Best method I see for it rn is finding a way for attachments to be dynamically applied to the character through a Held-in-hand contextual interaction, and removed conditionally so that they aren't stuck permanently like that.
like how daggers are in both hands? or do you mean how the game has an off hand? it should be possible to just swap the model if the first for the second unsure how that would work
Or have a weapon that corrupts the arm, or has runes that travel up to the back, etc.
Multi-nodal inheritance of appearance from the held item. Currently this is only possible through equipping the item, like armor.Best method I see for it rn is finding a way for attachments to be dynamically applied to the character through a Held-in-hand contextual interaction, and removed conditionally so that they aren't stuck permanently like that.
I'm not exactly sure what this means but sounds like an animation?
Also what do you mean by attachment?
Sheep wool works as an attachment, as do varieties in goblin armour/weapons, etc.
Sheep wool is removed through an ContextualUseNPCInteraction called HarvestInteractionContext, meaning you are able to "use" the sheep within the right context (having shears) and remove the attachment.
I want to do the opposite, and have holding a particular weapon in the right hand attach an item as an attachment in the left hand.
This will allow dual-wielding without having to rely on the mirror method with Render Dual-Wielded, and allow for holding something in the hand to cause other appearance changes on the body
A model is able to have multiple attachment sites by naming bones in the folder structure in blockbench, and this accurately reflects when importing attachments to animate on the player model in blockbench. However, in game, items that are held in hand on the hotbar do not care about folder structure beyond the hand holding the item, and cannot divide between the L and R hands each. There can only be one parent.
So the idea is to compromise, and have a weapon that has the model for the R hand weapon, and an interaction in the json that calls for the other model weapon to be attached as an attachment to the L-hand. (To keep two-handed restrictions, ticking the Compatible box takes care of that in the Asset Editor).
is there a vanilla way to visualize a collision/hit box of a entity ?
I saw a plugin on blockbench that apparently allows for it, maybe check hytale plugins there
How are ya'll creating void worlds?
UUID uuid = UUID.randomUUID();
Path path = Path.of("worlds", uuid.toString());
WorldConfig worldConfig = new WorldConfig();
worldConfig.setPvpEnabled(false);
World createdWorld = Universe.get().makeWorld(uuid.toString(), path, worldConfig).get();
I tried this, I got nothing...
Wait... I found IWorldGenProvider
btw....
- Path path = Path.of("worlds", uuid.toString());
+ Path path = Universe.get().getWorldsPath().resolve(uuid.toString());
incase the user changes the universe/worlds folder
Question, has anyones whitelists been funky or not worked? noticing a empty whitelist despite being able to add people to one
can a whitelist be corrupted?
[2026/02/23 06:34:57 INFO] [World|51b26f06-0cf6-4787-8d2d-4a4708106e66] Loading world '51b26f06-0cf6-4787-8d2d-4a4708106e66' with generator type: 'dev.swiss.worldgen.VoidWorldProvider@3a74488a' and chunk storage: 'DefaultChunkStorageProvider{DEFAULT=IndexedStorageChunkStorageProvider{}}'...
[2026/02/23 06:34:57 INFO] [World|51b26f06-0cf6-4787-8d2d-4a4708106e66] Added world '51b26f06-0cf6-4787-8d2d-4a4708106e66' - Seed: 1771828497338, GameTime: 0001-01-01T05:30:00Z
[2026/02/23 06:34:57 INFO] [SOUT] [SpawnGrid] Loaded block: Rock_Stone_Brick -> ID 928
[2026/02/23 06:34:57 INFO] [SOUT] [SpawnGrid] Loaded block: Rock_Stone_Brick -> ID 928
[2026/02/23 06:34:57 INFO] [SOUT] [SpawnGrid] Loaded block: Rock_Stone_Brick -> ID 928
[2026/02/23 06:34:57 INFO] [SOUT] [SpawnGrid] Loaded block: Rock_Stone_Brick -> ID 928
[2026/02/23 06:34:57 INFO] [SOUT] [SpawnGrid] Loaded block: Rock_Stone_Brick -> ID 928
[2026/02/23 06:34:57 INFO] [SOUT] [SpawnGrid] Loaded block: Rock_Stone_Brick -> ID 928
[2026/02/23 06:34:57 INFO] [SOUT] [SpawnGrid] Loaded block: Rock_Stone_Brick -> ID 928
[2026/02/23 06:34:57 INFO] [SOUT] [SpawnGrid] Loaded block: Rock_Stone_Brick -> ID 928
[2026/02/23 06:34:57 INFO] [SOUT] [SpawnGrid] Loaded block: Rock_Stone_Brick -> ID 928
[2026/02/23 06:34:57 INFO] [SOUT] [SpawnGrid] Loaded block: Rock_Stone_Brick -> ID 928
[2026/02/23 06:34:57 INFO] [Universe|P] Removing world exceptionally: 51b26f06-0cf6-4787-8d2d-4a4708106e66
[2026/02/23 06:34:57 INFO] [World|51b26f06-0cf6-4787-8d2d-4a4708106e66] Removing individual world: 51b26f06-0cf6-4787-8d2d-4a4708106e66
Could someone help me out with generating a void world with a predefined prefab?
How do you currently spawn in the prefab
Does anyone know why the NPC is using the run animation while it's moving towards its target?
{
"Type": "Generic",
"Appearance": "Player",
"MotionControllerList": [
{
"Type": "Walk"
}
],
"MaxHealth": {
"Compute": "MaxHealth"
},
"Parameters": {
"MaxHealth": {
"Value": 100,
"Description": "Max health for the NPC"
}
},
"KnockbackScale": 0.5,
"Instructions": [
{
"Sensor": {
"Type": "Target"
},
"HeadMotion": {
"Type": "Watch"
},
"BodyMotion": {
"Type": "Seek",
"StopDistance": 1.5,
"SlowDownDistance": 4.0,
"AbortDistance": 200.0,
"UsePathfinder": true
}
}
],
"NameTranslationKey": "Citizen"
}```
for (SpawnPrefab.BlockEntry entry : spawnPrefab.blocks) {
if (entry.blockId == Integer.MIN_VALUE) continue;
int worldX = spawnPrefab.origin.x + entry.x;
int worldY = spawnPrefab.origin.y + entry.y + 1; // raise prefab above floor
int worldZ = spawnPrefab.origin.z + entry.z;
if (worldX < chunkMinX || worldX > chunkMaxX || worldZ < chunkMinZ || worldZ > chunkMaxZ) continue;
int localX = worldX - chunkMinX;
int localZ = worldZ - chunkMinZ;
blockChunk.setBlock(localX, worldY, localZ, entry.blockId, 0, 0);
}
Thats over my head sorry, i thought first it might be a prefab floor issue but idk
havent worked with custom npcs yet but is it possible that the "seek" bodymotion is what you mean with "run animation"
That's what I was thinking... I think it needs that to follow the target though.
The strange thing is, it seems to ignore my parameters (which aren't in that code snippet above) which sets the speed, increase the run threshold so it should never run, etc.
Never mind, figured it out!
What was the issue?
what was the issue
SMURF!
BodyMotion has a configurable "RelativeSpeed". By default, this is set to "1", which is fast enough for the run animation. Lowering it to "0.5" slowed the speed which resulted in it not using the running animation. It's just strange that it ignored my Run Threshold. According to the description, the run animation should never be triggered if the run threshold set to "1", which I did.
i saw a tutorial where someone made an npc frozen in place but still walk it looked funny
thanks to this i figured out the name and location you need for the ModIcon for the new mods page in the pre-release version. Where did you find this name?
FYI it sits in the root of the folder by your manifest
haha
how do u make sure asset1 will load first before asset2
the ordering in the codec that loads the assets.
If you talk about entities, they should probably be made to not have a hard dependency on each other, for systems you can state before after parameters to other systems.
really depends on what asset and what time.
Did you find a fix? My mod pack is not showing up in the asset editor, although all items and blocks from my can be selected and placed in creative mode.
They did show up before the recent update. Did I miss something? Error Logs from server does not list anything wrong with my mod. It can be loaded and reloaded just fine
did you change from the hytale default package to your mod package?
yea this seems like being in Hytale:hytale (read only) on the top left, switch that to your pack
gm
I'm in the same boat. Have not found a solution yet... Considering recreating my project to see if that works.
if you refer to the drop down menu on the top left , yes.
Before the update any block or item added would create its own asset pack and you can browse it as read-only from the drop down menu.
After the patch, it's gone even though the blocks are available and valid/working inside the game
is it possible to like rename an item like how in minecraft u can use Anvil to rename item?
only a specific item or the entire item (like the base name can be changed from e.g. "adamantite pickaxe" to "shiny rock pickaxe" using asset pack)
so i cant just dynamically update them?
through code
i dont think such a mechanic is in vanilla rn, but should be quite easy to mod in
idk about vanilla that much barely played
yeah i am trying to make a plugin where u can rename items but not even sure if its possible
there is a nameplate component, that is used for monsters and players and some other things that need names.
You could probably add that component and add events to update the displayed named based on that somehow.
yea either that or work with some custom component, i saw someone work on an mmorpg server and had like stat buff runes being able to be applied to an item and it would list all of them
Or you could make your own component. since the names would probably need to be stored with the item in someway for restarts etc.
that way there is not risk of crossing over or replace a nameplate that something might need logic wise.
yea probably easiest to make like a CustomName component. You can probably play around with that and make other methods that even change CustomName to something like [Lvl 4] Adamantite Pickaxe or similar
bet ill look into it
just by being able to call CustomName with "[" + levelInt + "] " + itemName
I can now list all active entities in my custom ui page and get a list all their components when clicked, next up is being able to click the component and see specific data in it.
thats fire
idk if you saw but i got my decay block system working, i will in a week or so try myself with npcs and try to make one that changes the blocks in walks on
Cool. Once i get this up and running, I will add my StoreFront and LivingSpace Block Components, and start working On my Travelling NPCs
i dont wanna get into UI yet as they said they wanna change that system
so i would rather do some basic systems in java like currencies/stats/custom weapon assets and similar
how is the UI system changing and is it gonna be drastic? I have made so much UI already 😭
my next project is a DamageLeaderboard component that can be used to track dmg in group fights and be exported to use in loottables and similar
talk about them moving over to xaml and xaml style declaration instead of .ui
from what i heard
not sure it just mentioned on the wiki they tryna switch to noesisUI
I would like some help regarding double chests.
I’m trying to retrieve the PlacedByInteractionComponent from a chest to know who placed it.
It works fine with a single chest, but with a double chest I’m unable to retrieve this component.
So I’m wondering: is this normal? Is my base approach correct?
Thank you for your help.
it is possible to rename items just made it :)
Just make sure it persists and loads on restarts as well, so it's not just in memory for as long as the server is running.
yeah its through meta data
Right, you can do so much with the metadata without needing to modify the base object.
yeah its peak
Hey everyone! 👋
Is it currently possible to have a separate log file per plugin, instead of everything being mixed into the main server log? If not, is it something that's planned for a future update?
It would be really useful for debugging — especially when running multiple plugins at once. 🙏
Thanks!
that's usually not how logs work, but you could try to investigate easy options to filter log files for specific words so you only get relevant entries
That makes sense, thanks! 😊
Do you know if there's a way to filter logs by plugin name or logger name directly from the server config? Or would it be more on the tooling side (like a log viewer / grep script)?
i think what you want is more of an event log not an actual error log
most plugins by default have the plugin name near the start of the log, so that should help, particularly for filtering as mentioned above ^
nothing is stopping a particular plugin creating their own log file though
like log entire chat from player x in "playerX.txt" and every new message just gets put in there
I'd try tooling side. It's usually enough for me to just search the mod name in the log file 🤷♂️ or a specific item. Also, searching for terms like "exception", "error" or alike helps in finding out what's broken
Is there a sales mod that allows you to add sales bonuses based on group/permission?
sales as in shop system or different
shop system
That's really helpful, thanks everyone! 😊
What I'm actually looking for is separating my plugin's own logs and events from the main server log — I think it would make it much easier to track and trace bugs specific to my plugins, rather than having to dig through the entire server log each time.
The idea of writing to a dedicated file directly from the plugin sounds like the way to go then! I'll look into implementing that on my side.
There is the ability to do
public static final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
Just saying.
that still sends it to the console log
i think what it does is it puts the [Filename] prefix
👍
talking about logs. Anyone have any clues about sentry, since there is implemented support for it.
there might be an extension of the bartering shop system, but most people i know work on server shops/upgrade uis etc that take items or custom currency are still in the working or concept stage rn
Is it possible to somehow remove the block animation using a custom block component?
Hey, quick API question.
I noticed Entity#getUuid() is marked @Deprecated(forRemoval = true) in the current server jar.
Is there a planned replacement for accessing a player’s UUID in PlayerReadyEvent, or is this just part of an internal identity refactor?
Just want to future-proof my plugin.
anyone can help with why i can't see all mod directories in my asset editor?
just got a mod and the dev mentioned i should be able to customise things through the asset editor, but i dont see it as a pack to be selected
ref.getStore().getComponent(ref, UUIDComponent.getComponentType()).getUuid();```
Will probably last longer than getUuid() Ardent.
thank you!! much appreciated will update my stuff!
I think you'd probably want to use a separate logging library and ignore the plugins' logger.
Hytale's logging can't be customized, split or configured.
Is it worth getting into UI now or will chamge alot with the future switch (if thats still accurate on hytalemodding)
I think both. Eventually, most things will get replaced by Noesis, but that's still some way out. If you want to interact with UI now, don't wait on future updates
i would stick to their philosophy, you can make something that works in the meantime and come back to it later once things are more finalized
Exactly what Dani said.
Besides as a dev there's knowledge to be gained from UIs in general. The ideas come back.
Also, when it comes to overhaul your UI for Noesis, having an existing UI to act as a goal/guide will make it easier than starting from scratch at that point.
Okay ty
Does anyone ever tried to handle Model transformation in a plugin?
Have anyone tried to determine if a server is working as intended programmatically?
Basically, my VPS lost connection to the internet for a while today - but the instance never actually shut down and now when I try to join all it says is "Failed to obtain authorization grant from session service" - but how can I make the server aware of this problem and trigger an automatic restart?
Like can I connect to the server via sockets and get some kind of "a-ok" response?
I do have some plugin installed already that tells server listing websites whether the server is online, but it simply considers the server to be in working condition although its really not
Is it possible to somehow remove the block animation using a custom block component?
Error saving prefab test.prefab.json: Cannot invoke
"com.hypixel.hytale.server.core.asset.type.fluid.Fluid.getId()"
because the return value of
"com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap.getAsset(int)" is null
Has anyone ever gotten this error?
Which event can I use to save a player’s inventory when they leave the server?
In the onDisconnect event, I can’t access the inventory anymore. 😭
Can I run multiple clients for testing?
Not yet, but that will be possible in the next update
Is it possible to open a custom UI with the user inventory?
Wizard Testing haha
you can't open an "inventory ui" since that's native, but you can read the user's inventory data and construct a custom ui for them to interact with
i did not fight a fix no...
Hey i was curious but, is there concept of keys / lock door in hytale yet? I wanted to practice some coding and do some plugin and was wondering if it existed already?
It is possible to assign, for example, two animations to a single block and manipulate them using a plugin and play them at specific moments during code execution.
Yes. For example chest open & close animations
Can I run the server on TCP?
Instead of?
no?
like maybe but like in the sense you can do a lot of things if you really put your mind to it
Is there a way to send an image in chat?
yes, but you can't connect to it without a dev client
Is there any way to override Client UIs? like the Chat.ui and Hotbar.ui?
No, they are specifically called out as unmodifiable by the current system: https://hytalemodding.dev/en/docs/official-documentation/custom-ui#client-ui-not-moddable
yo is the asset editor fixed in the pre-release/update 4? if your unaware it currenlty (as of update 3) cant view Plugin assets
In case you were wondering... I got a gameboy emulator working using the map. 
thats wild
Anyone know if its even possible to spawn the ghost blocks that are used in the builder tools?
Ive searched like everything i can think of and cant find a thing to help me
someone told me that they might just be client sided and the server doesnt even see them, if thats the case @lilac notch 😉
Whats the most efficient way to reset a world when like a minigame round ends? Preferably without Server-Restart? I cant have a normal survival map, so I think just deleting the whole universe isnt an option, it should load my arena template.
I was thinking about removing all from the specific world and copying the file contents from a folder and then teleport everyone back into it.
Is there a better approach? Would mine even work? Hope someone that has something like that already could help me :D
Zou need instances. You can create an instance of a world or 100
BTW, any recommendations where to advertise for my server ? Are there like good website you guys would recommend or discords ?
I recommend having a lobby (can be a vanilla map if you Just want to play with friends or more professional if its public).
Like already mentioned use instances, and delete an instance after a round has finished (if you want to safe stats you need to do that before wiping the instance)
There is already a template ingame for a Server list, but that is not yet functional
Yes its a public minigames server, so Instances is probably the right way. Are there any docs for that? Thank you!
Search for hologram see what yo ufind.
cant post links, dm
hytalemodding wiki under World and Entities -> Instance System would be the passage for you
There is not much instances docs yet but im pretty sure they work oyu just kind of have to gothrough their logic
since there already are /instance commands
got it, thank you :)
This is simply not true seeing how @tawdry geode could provide me a well written doc
thank you anyway
Hey, is there a way to easily make your mods install to the server and write themselves into the config.json so they are active?
It's rather annoying to have to copy/remove them each time i change something, let alone the need to adapt the .json every time
public Main(@Nonnull JavaPluginInit init) {
super(init);
this.Config = this.withConfig("Plugin-Config", PluginConfig.CODEC);
}
@Override
protected void setup() {
super.setup();
this.Config.save();
}
Plugin config needs to be your own class / data type
and where would i need to find that information?
Thats in your Main Plugin Entry point
public class Main extends JavaPlugin {
public final Config<PluginConfig> Config;
public Main(@Nonnull JavaPluginInit init) {
super(init);
this.Config = this.withConfig("Plugin-Config", PluginConfig.CODEC);
}
@Override
protected void setup() {
super.setup();
this.Config.save();
}
}
okay, i admit, i have not the slightest clue what or where that is, how to find my own class/data type and where to put it.
my server knowledge is from 15 years ago setting up an ark server that basically did everything itself.
Kindly help me out? @brave mural
What you are talking about that you are not making your own mods, you just want to be able to configure existing one without source access?
I assume you have your own Plugin that you are developing. If Yes - Watch this guy: TroubleDev - Hytale Dev Tutorials on youtube
If Not and you are playing around with other peoples plugin, then there is not much you can do besides praying that they have a command that lets you update the config while ingame
Does anyone know if its Possible to load custom Fonts in hytale or u can just use the default one?
i have the issue that my non-.jar based mods aren't loading on my server that i set up.
all .jar mods get loaded no issues.
i figured out that it can be fixed by this method:
Same Issue, but i have found a rather wierd fix for it. Apperently in the Server Config is written wich mods are active. Now since you would need to write them out by your self i recommend to create a world with all mods active you want (wich is kinda annyoing considering you add more mods afterwards). Go into the Save faile located at "C:\Users\<YourUser>\AppData\Roaming\Hytale\UserData\Saves\<YourWorldName>. Open the config file and copy the "mods section" which could look like this and paste it in your server config:
This seems rather a workaround than a long term solution
This have nothing to do with modding or server-plugins development. This have to do with the tool you use to install mods and server maintainance and setup.
No there is no way for hytale to keep track of files you or a third party tool download and install on your own, and not at all the scope for this group.
but there are probably third party tools that help with server maintaintance and setup but i have no idea what they are.
Hello again, does anyone know what I should put in that function?
I tried a lot of block names and it always return "null", is there a specific key format?
ModelAsset.getAssetMap().getAsset(String key)
I am stuck on this since monday.
Is there any plugin letting saplings drop from trees that hasn't broken last update and hasn't been abandoned?
ik Serilium tree harvest still works, but he isn't maintaining his mods at all, just did the version bump, no bug fixes, etc... I really dodge mods with no maintenance is asking for problems if you want a lasting world save.
too many mods being abbandoned, even if they work just to see modders not even bothering with the version bump is depressing tbh
Well, how about you just do the version bump?
You call list all IDs in the AssetMap with something like:
ModelAsset.getAssetMap().getAssetMap().values().stream()
.map(SomethingSomethingGetID).collect(collector);
No wait, .keys() instead of .values()
Hi, Is there a way to store information linked with no game object ? Just linked to a server (any world)
Consider how you would do it in any other program you make, except you use the uuid for the world in question and persist it in a file in your server folder?
Its essentially asking, is there a way to save and load data with java without using hytale.
People have done it before.
or for anyworld
ignore the uuid and just save a file for data persistance and create a singleton class for the data or what ever its supposed to manage.
Or a plugin that does the same.
Oh ok, well it reveals why I was not getting anything out.
Turns out It only contains entities models, not block models.
How can I get block models then?
Have you checked that entity models and block models use the same underlying architecture and can be used interchangeably for your purposes? I assume there's a reason they are stored separately (and the reason might range from complete incompatibility to just a performance optimization)
I mean the plugin can store config info given in a earlier example the plugin config could at a streach hold the server information if one does not even want to make another data object to hold the information.
The Asset Editor seems to only list mods that are either folders or .zip files, but ignores .jar files. I'm afraid this got introduced in the latest update. Any place to report this?
Did you or the moder set the flag that says that the mod includes assets?
"IncludesAssetPack": true,
yes, the mods contain asset packs, (manifest contains "IncludesAssetPack: true") and the items and blocks are also valid and useable inside the game. it's just the asset editor won't show the (read-only) asset packs
What can I do to check that?
good good, just checking.
Reading the source code, experimenting by replacing entity and block models in the asset pack, etc
That's where I would look on first glance
also look if there are any events that set that value, in that case you can register your own system with event listeners to just see what data you get in.
I have a question.
Can you set breakpoints in the server jar you depend on and hit those in debug? Or are you limited to your functions in your source?
in C# i know you need to activly browse into the dependency and add the breakpoints in there unless the project have straight source access.
I would never call entitiystore with blocktype
You can set breakpoints in the Server jar, yes. Just have to make sure you don't put it in a pre-decompiled one because then the debugger probably won't be able to match the sources
nice, good to know for the future.
Ok so after testing in the asset editor, it does seem that they are in the same formats at least.
I still don't know how to get a block model from code, but yeah that's still progress.
I thought it looked like the id might just be the modelfile name when going trough some codec nesting and where it got the id in some places.
But the reality might be that any class may store the asset id as it please and then the context defines how to load it again.
The assetid seems to be more of a look up for a value that will be used in later systems. But i am not sure.
What is a dev client? I live in a country where QUIC is blocked, and this is very important for me. Is there any way I can run it?
Hmm, I really don't know how to do then.
Getting a block model should't be that complex I am pretty sure, but without any documentation it gets really tricky to find the intended solution.
"BlockEntity": {
"Components": {
"Coop": {
"FarmingCoopId": "Coop_Chicken"
}
}
},
But this seem to be especifically for the coop?
no it especially for the BlockEntity
My understand is that the assetmap will in majority of cases be a reflection of the json file, so the id is often the name of the json file it loaded from.
models in turn are also assets and also json files. (assets all the way down...)
in that json file and asset map in turn it referens to
"BlockType": {
"Material": "Solid",
"DrawType": "Model",
"Opacity": "Transparent",
"CustomModel": "Blocks/Farming/ChickenCoop.blockymodel",
where the asset for the coops block type specify what model to use instead of the default block model.
Yeah I check the structure, and actually I would want to get the Model that the "CustomModel" is pointing at.
So then you could query the blocks entitystore for the BlockType component and get the CustomModel value.
hmm maybe not
ignore me for a while i forget that blocks sometimes do things a bit differently.
as long as you have a entity store you can allways try to get the component with componentype ModelComponent.getComponentType()
the thing is if you have a "pure" block i am not sure if it got a model without custommodel being set, since at least I would generate the mesh for the chunk in code and not hold a block type. And the block type i would hold would be a default cube with texture overrides for the inventory.
I should stop talking like i know anything.
I’m running a Hytale server for the Russian community. Many ISPs in Russia currently block or restrict QUIC (UDP traffic), which prevents players from connecting to servers that use QUIC transport.
I’m starting the server with the --transport TCP flag, expecting it to fully switch to TCP. However, players in Russia still cannot connect. It seems like the server may still rely on QUIC/UDP in some way, even when TCP transport is enabled.
Has anyone experienced this issue or found a working solution to force pure TCP mode?
I would really appreciate any help or guidance. Thanks!
Has anyone figured out how to apply speed boosts to entities?
i now rewrote my lootcrate function to be used in item interactions, now I got myself loot crates into the game. It uses an axe texture so far because i needed a placeholder but it feels so cool alr
You can run it over TCP?
”Hytale uses the QUIC protocol over UDP (not TCP).”
https://support.hytale.com/hc/en-us/articles/45326769420827-Hytale-Server-Manual
doesn't work like that, sounds like your situation is unsupported sorry
Hello !
How do you read the plant harvest information inside a Hytale plugin?
Are you accessing it through an event listener, a specific API method, or custom data attached to the crop block?
Yeah. Probably have to recommend your players to round the government fire wall and isps.
Yes.
Which event do you use to detect plant harvesting in the Hytale plugin?
Think its one of the interaction events for when you harvest.
Searching on harvest quickly for instance give a hit for "HarvestCropInteraction"
Where can i find the file thats called from this block of code,
{
"Type": "OpenCustomUI",
"Page": {
"Id": "ItemRepair",
"RepairPenalty": 0.1
}
}
im trying to find "ItemRepair" as i wanna make it so you keep the item, but i cant find the code used in any of the folders and its driving me up the wall trying to find it
how can i get the server version?
- In the bottom-left corner of your launcher
- At the start of your server log at
Booting up HytaleServer - Version: xxxx.xx.xx-xxxxxxxxx - Via the
/versioncommand - With
java -jar HytaleServer.jar --version
thank you
how do i make it so when i use a repair kit it does not consume it? im trying to make a "legendary repair kit" for my server, and i cant seam to find where it says it consumes it
the class for
repairiteminteraction
the row
ItemStackSlotTransaction slotTransaction = heldItemContainer.removeItemStackFromSlot(heldItemSlot, heldItemStack, 1);
where do i find the class for that? what folder cuz i couldnt find the file
RepairItemInteraction in HytaleServer.jar
com.hypixel.hytale.server.core.entity.entities.player.pages.itemrepair
is this java coding, or json lol i havent messed with java yet
willing to learn today if thats the case haha
Well you are asking in the java plugin channel so I assume you wanted a java plugin answer.
sadly theres not json modding channel lol
is there a way to do it threw json? if not i can go learn java, i did learn lua
I doubt you'll find an ItemRepairInteraction that doesn't remove the repair item by default
In any case, you'll have to look at the code
most likely in the jar file of the mod you use
lol sadly thats base game XD i have to go threw a few hundred folders to find it
If I would make a legendary repair kit i would focus on it not decreasing durability as much to begin with.
but i don't think thats exposed either.
hi guys
HI
I'm off. D&D time.
i already have that part done, it actually makes it so the item gets more durability when used
IDE indexing is your friend. And then there is Ctrl+F for everything else
in the interaction json files, is it possible to check for keyboard input? i want to make an interaction that checks for left and right movement keys
uhh in that case i would start lookin in the asset.zip common/ui/custom/pages
but editing those is not supported an will be overwritten with the next update
have a nice d&d session. hopefully you don't have to deal with a first edition fighter with 3 hp lol
checked all those they just handle the UI that pops up i think ill have to do what space said, i can write lua so java shouldnt be too hard to understand, i just dont know how to folder structure the file after when i drop it into my mod
if you create an asset pack via the asset editor you should have a folder in your mods folder, you can then create the same subfolder structure within (common/ui/custom/pages) you should be able to reference it from there ingame
how do i edit a class file? as VSC does not support it lol
i thought you wanna edit a ui file?
its kinda is a UI file but its main file is a .class and i need to know how to write in it
Look up "how to get started with Hytale plugins"
does anyone know how to do this?
xD will do haha
as far as i can see, the json files only accept hard coded values, so i'm struggling to figure it out
i imagine there would be some object type, but i'm not sure what it would be
btw after the auth login, does the server already work or do I have to do something else? I downloaded the file and did the auth. but I cant really change the port, or atleast I dont know how
what file did you download? hytale-downloader(.exe), or HytaleServer.jar?
first hytale downloader.exe and then I started the start.bat file, which downloaded the HytaleServer.jar
most interactions go with predefined actions, not all keyboard keys are accessible.
o java is just like lua but more complex i can read it though 😄 was finally able to decompress the class file 😄
when you start the server, you can tell it the port to use via the --bind argument
it tells me --bind isnt a valid command or do I have to do that different?
java -jar HytaleServer.jar --bind <address>:<port>
yeah, i'm trying to make a secondary action that changes depending on what direction you're moving
I put that in where also the start.bat opened right?
what do you mean with "opened"?
cmd.exe
I don't understand your question
I tried to put it in the console and it tells me the command doesnt exist
There is a great difference between executing a lua script and compiling java.
go read the hytalemodding dev documentations on how to create a plugin project.
you have to supply the argument when starting the server
so I have to edit the start.bat file with that?
If you use a start.bat file to start your server, then yes
okay I will try that thanks
maybe ask the person who made it for you if you're having trouble with it
so i got JD-GUI but when i try to open the file it does nothing anyone else here use JD-GUI
okay now I got a new error xd
"Connection handshake was canceled due to the configured timeout of 00:00:10 seconds elapsing."
where can I configure that...
are you connecting to the correct address?
why my sevrer is not detecting my new prefabs?
you may need to reset the server after adding them, if you added them while it was still running
i restart it but it only detects the old ones
the new ones dont have .bak at the end of them right
oh im trolling it had a space in between the name and the dot
if I inserted it correctly into the start.bat file than yes. could I maybe share with you some screenshots? only if you have the nerve and time for that.
i cant get any of the decompiler programs to work and im about to put a hammer threw my pc
So I used to be able to override files in my mod, but now after updating, it doesn't appear in the asset editor anymore. The mod still functions, its just the asset editor it seems. Has anyone else had this issue?
using intellij you can just browse into the jar.
With for instance kaupenjoes plugin example you can run gradle scripts to decompile the server jar as well if you are not ok with intellijs default interprtation.
honestly im not liking how any of the file editors i have only let me view the code, what do people use to edit it? cuz i watched a few videos but when i try to recreate what they do or follow there instructions i still get you cant edit in read only editor
like right now im using a decompresser for VSC but i cant edit a thing in it
Does anyone know how I can run multiple instances of hytale at the same time for testing purposes?
Wait for the next update
for now you'd have to use a vm for each isntance
You don't edit the existing files, you create new systems that listen to events, or system that run in different intervals for specific components.
do you have a youtube tutorial i can watch, where someone atually goes over this, cuz im not finding any
im not liking Modding by Kaupenjoe
KaupenJoe said he isnt updating his anymore But as an alternative i would suggest just getting the plugin straight from intellij's plugins list called Hytale Modding by HyContent. it auto decompiles the jar AND it has everything built into it upon creating a mod to run a server right inside intelliJ so you dont have to move mods into folders and mess with a bunch of things you just hit start server then in game you connect to "localHost"
when using on the map right click teleport (feature after update) people get disconnected saying with the disconnect message: "You are not allowed to use TeleportToWorldMapMarker!" anyone has the same issue?
but they have hytale.command.teleport.all
is that what the code asserts?
whats the permission for teleporting to via map in creative/op?
unfortunately I don't know
I think the dev build only the Hytale team have
how can i execute an interaction when a block breaks?
Asset Editor Question : When i make a .json of another mods item to give it a different rarity and tooltip gui but when the server restarts it converts them back to the original item from the other mods, is there a way to get my asset to override theres?
Or would i have to manually need to go in and edit there files
public boolean isAllowTeleportToCoordinates() {
return this.player.hasPermission("hytale.world_map.teleport.coordinate") && this.player.getGameMode() != GameMode.Adventure;
}
Wasn't difficult to find 🫡
first off: thanks, secondly wasnt looking at any code thought someone already had the same issue and would know a fast answer ^^
sorry, didn't intend to throw shade
id like to bump this again sorry
the mod that loads last overrides the mod that loads first
you can try adding them as an optional dependency. I suspect that will guarantee load order
how do i do that, would that be in the manifest?
yep, exactly
where it says OptionalDependencies do i just put true in the brackets or do i need to write all the mods names?
I'm going to guess it is not at all possible to modify builtin plugins? I was looking at modifying how residents spawn from coops. Them spawning in a radius is kind of icky as it means you need at least 2 blocks behind the coop itself to prevent them from spawning outside of said fenced area.
all the mod names and their versions
what would that look like roughly
"Dependencies": {
"Hytale:OtherPlugin": ">=1.0.0"
},
"OptionalDependencies": {
"Hytale:SomeOptional": "*"
},
Not 100% sure on the >= syntax
you can edit it with an earlyplugin if you can't properly hook into it normally
so like `"TheKrakInn:TreasurePeices" : ">=1.0.0"
Group:name : Version?
yes
okay cool thank you!
I can look into early plugins - probably not worth the effort though. Might end up just changing the radius to 2 so they only require 1 block behind the coop to spawn instead of 2.
Hello, i need help idk how to get this 3 T_T
if (chunkRef == null)
return;
ComponentAccessor<EntityStore> entityAccessor =
commandBuffer.getEntityAccessor();
ComponentAccessor<ChunkStore> chunkAccessor =
commandBuffer.getChunkAccessor();```
Please elaborate
oh yep, i need them to place them in the naturallyRemoveBlock funct so i can remove a block
I don't understand what you're asking, what you're trying to do, and what you have already tried
I’m trying to simulate a special block that, when broken, destroys a 3×3×3 area around it using the normal mining/loot via BlockHarvestUtils.naturallyRemoveBlock(), but inside BreakBlockEvent I don’t know how to obtain the required Ref<ChunkStore>, ComponentAccessor<EntityStore>, and ComponentAccessor<ChunkStore>
not much
- look how the shovel does it
- you get them from the system handler via EntityEventSystem: #server-plugins-read-only message
Is it possible to add some kind of custom interaction after clicking a button?
Ah sorry, someone talked about i was sure it was a thing. But ok, you can set a block types material to be Transparent. So its probably done that way some how.
It all falls under block preview visability i am not sure if the build tool display is the same i realize. Sorry.
I know i can do that, i was hoping i could make it so it didnt actually overwrite the blocks till it was actually placed like the builder tools so i didnt have to store inventories for chests and stuff if people moved it over their chests for a second on accident
Cause this sounds like a nightmare to me tbh and i feel like id end up making some sort of dupe glitch, i already accidently made one in my inventory management system that i cant figure out how to fix, but its only possible when the server crashes and only for like 4 seconds right before so i dont think its too big of a deal
Ok so I’m pretty new to modding and I’m attempting to create a pet NPC. I’ve created custom animations for it but after I’ve set up the model and the NPC behavior I wanted it just sits there stuck in its idle.
Do you know that hytale released official documentation for making npcs? https://hytalemodding.dev/en/docs/official-documentation/npc/1-know-your-enemy
Oh I did not I’ll take a look at this thank you
gasp did they add hytalemodding to the allowed URLs? That's good news.
anyone know if theres a load order mod?
test https://hytalemodding.dev/en/
nice.
interesting
is that because its not filtered or are you bypassing somehow?
no, because those official guides are so often recommended. I felt bad about bypassing them every time and asked them to add it to the whitelist
ah alright
thats kinda neat
Hytale is not giving 🙁
inline fun<T: CancellableEcsEvent> cancelledEcsEventListener(clazz: Class<T>, query: Query<EntityStore> = Archetype.empty()): EntityEventSystem<EntityStore, T> {
return object: EntityEventSystem<EntityStore, T>(clazz) {
override fun handle(
index: Int,
chunk: ArchetypeChunk<EntityStore>,
store: Store<EntityStore>,
commandBuffer: CommandBuffer<EntityStore>,
event: T
) {
event.isCancelled = true
}
override fun getQuery(): Query<EntityStore> = query
}
}
java.lang.IllegalArgumentException: System of type net.pseudow.minecraft.hub.listeners.protection.CancelledEcsEventListenerKt$cancelledEcsEventListener$1 is already registered!
now we just need that for the wiki
at least we can bypass it
copy paste error where you accidentally registered your system twice?
I use this function multiple time to avoid having to rewrite a class for just a cancelling, however it isnt accepted even though its inlined
oh I see
kotlin obfuscates what's happening there
you're basically adding the same class, since it gets optimized by the compiler most likely
yeah i think kotlin is itself optimizing it
because in the context it seems it(s useless to have an inline keyword
Any idea why event fires, but not cancelled when picking up flowers for instance?
class InteractivelyPickupItemListener: EntityEventSystem<EntityStore, InteractivelyPickupItemEvent>(InteractivelyPickupItemEvent::class.java) {
override fun handle(
index: Int,
chunk: ArchetypeChunk<EntityStore>,
store: Store<EntityStore>,
commandBuffer: CommandBuffer<EntityStore>,
event: InteractivelyPickupItemEvent
) {
println("HSUIAJUISOA")
event.isCancelled = true
event.itemStack = ItemStack.EMPTY
}
override fun getQuery(): Query<EntityStore> = Archetype.empty()
}
version: "0.7.2-alpha"
You sure it's not cancelled? Usually the flower goes into your inventory but when cancelled it drops on the floor
it is canceled mb i didnt see it would drop in the code. Is there a way to cancel the drop as well?
Is the field example i find for the ui deprecated because the ui is changing or because you are supposed to declare it in a different way.
.addField( new KeyedCodec<>("NODE_EXPAND", Codec.BOOLEAN),
or because there is another you are supposed to use that i don't find a good example for?
Ok i could chain add().append( ...) instead of using pure addfield.
Will check tomorrow if it works.
I've got a UI related question. Are we able to create responsively sized ui elements? For example, creating a page that is 50% the width of the player's screens.
If not, how is everyone accommodating different player screen sizes? my current approach is to just make it work for 1080p for now
you have a flex value you can set for elements, where the size flexed will be the remainder of the parent size, and the values from all flexible elements are divided.
so if two have flex 1 and one flex 2, then then flex 2 will be as large as the two ones in the remaining space.
so if the width was 400, you had something width 200 then two object with flexwidth 1 and one with flexwidth 2, then the flex width 2 would be 100 of the remaing and the flexwidth 1s would be 50 wide each
I am not sure if you can just set the the default page to have a flex size, because then that would be relative to the screen.
I am kinda sure the new ui system with xaml will use roughly the same.
but the best would be if you could make a flex width/height for the the page and just state it in fractions. Like make a page cover 0.8 width and 0.9 height.
How do I add new Instances?
Great, thank you. I will try flex sizes and see how that works for now.
is there a way for me to get my json file to overwrite someone elses? for example.
Warp book mod, i want to add my own custom quality level to it, and when i make the changes in my own folder it works till the server resets, i was wondering is there a way to get it to retain during the reset? as i cant seam to find a way to get the mod to load last
iv also noticed that my asset pack is not loading in as a plugin..
thats beccause an asset pack IS NOT a plugin its an asset pack a plugin is a jar an asset pack is a zip and the word MOD covers both because they both MODIFY the game
alittle excessive there, was not known to me, but thank you, im just trying to figure out how to get my asset pack to load last so that it over writes other mods that are plugins
wasnt trying to be "excessive" i was just emphasizing the differences
lol i have modded games before, i do understand before this interaction you didnt know that, im just frustrated today cuz i cant get this asset pack to load last
i get that but capitalization is not always "Yelling" go beat up your teacher for pounding that into your head if thats what you still believe in this day and age not me lol i dont know anyone who Yells the word LOL instead of laughing.
fair, but you got any ideas on how to get an asset pack to load after plugins lol, as every time i look at my logs assets load before plugins
I dont BUT have you tried the simple thing of just making the mod start with zzz_ or aaa_ incase its reverse alphabetized loaded?
OH
(have tried this) but when looking at the load order, it does not load the mods in a alphabvetized oreder
a thought maybe its alphabetical by the mainfests main name
i could try that didnt think to look in there
"Main": "com.oregenlib.OreGenLibraryPlugin", so instead of that try something like "Main": "zzz.oregenlib.OreGenLibraryPlugin", or "Main": "aaa.oregenlib.OreGenLibraryPlugin",
didnt work sadly 🙁
its also a asset pack so it loads before all the plugins do, maybe i just cant overwrite other peoples mods >.<
can i turn it into a plugin? iv never made a .jar file before