MysticMods / Roots

Home of the Roots Minecraft Mod
GNU Lesser General Public License v3.0
44 stars 33 forks source link

Client side crash ticking Entity stopping player on server #799

Closed AechtRob closed 10 months ago

AechtRob commented 1 year ago

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?)

AechtRob commented 1 year ago

Roots-1.12.2-3.1.7.jar

AechtRob commented 1 year ago

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)
noobanidus commented 1 year ago

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?

ByThePowerOfScience commented 10 months ago

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.