Roots

Roots

24M Downloads

Client side crash ticking Entity stopping player on server

AechtRob opened this issue ยท 4 comments

commented

General Information

Describe the bug:
One of our players on our server is receiving a server-side crash repeatedly:

-- Head --
Thread: Client thread
Stacktrace:
    at epicsquid.roots.entity.EntityLifetimeBase.func_70071h(EntityLifetimeBase.java:112)
    at epicsquid.roots.entity.ritual.EntityRitualBase.func_70071h(EntityRitualBase.java:14)
    at epicsquid.roots.entity.ritual.EntityRitualOvergrowth.func_70071h(EntityRitualOvergrowth.java:28)
    at net.minecraft.world.World.func_72866_a(World.java:1996)
    at net.minecraft.world.World.func_72870_g(World.java:1958)

-- Entity being ticked --
Details:
    Entity Type: roots:entity_ritual_overgrowth (epicsquid.roots.entity.ritual.EntityRitualOvergrowth)
    Entity ID: 31939
    Entity Name: entity.entity_ritual_overgrowth.name
    Entity's Exact location: -508.51, 55.00, 1044.90
    Entity's Block location: World: (-509,55,1044), Chunk: (at 3,3,4 in -32,65; contains blocks -512,0,1040 to -497,255,1055), Region: (-1,2; contains chunks -32,64 to -1,95, blocks -512,0,1024 to -1,255,1535)
    Entity's Momentum: -0.01, -0.08, 0.00

There is no conflict showing as such, just this ticking error which causes the client to terminate. The modpack is here, but I don't think it's related to other mods: https://www.curseforge.com/minecraft/modpacks/chronos

(Is it related to UUID handling on a server in some way?)

commented

Further issue which may or may not be related:

java.lang.ClassCastException: java.lang.Byte cannot be cast to java.lang.Integer
	at epicsquid.roots.entity.EntityLifetimeBase.func_70071_h_(EntityLifetimeBase.java:112)
	at epicsquid.roots.entity.ritual.EntityRitualBase.func_70071_h_(EntityRitualBase.java:14)
	at epicsquid.roots.entity.ritual.EntityRitualOvergrowth.func_70071_h_(EntityRitualOvergrowth.java:28)
	at net.minecraft.world.World.func_72866_a(World.java:1996)
	at net.minecraft.world.World.func_72870_g(World.java:1958)
	at net.minecraft.world.World.func_72939_s(World.java:1762)
	at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:1847)
	at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:1098)
	at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:398)
	at net.minecraft.client.main.Main.main(SourceFile:123)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
commented

This is a bit of an odd one. The line in question:

getDataManager().set(lifetime, getDataManager().get(lifetime) - 1);

The implication here is that getDataManger().get(lifetime) is returning a Byte rather than an Integer. I'm not sure if @ByThePowerOfScience has changed anything with regards to this code recently, but this shouldn't be happening, unless I misunderstand how the VARINT data serializer works.

You said "server side", but I assume you meant client-side?

Unfortunately I don't have access to the most Roots codebase. One thing I would double check is that the player is running the correct version of Roots, the same as the server?

commented

My only guess is that some other mod is manually setting the lifetime NBT data to be a byte instead of an integer, which is causing the error. I don't know of any way to prevent this, but I can make it forcibly convert the value to an integer when it's updated.

If this happens again, let me know.