Bug Open

Bug Folia 1.21 with solution

#5330 opened by Unknown 2 years ago

Unknownreported this bug

Hello, I'm here to report this bug on Folia. Additionally, there's another bug in the FoliaScheduler where the delays must be greater than 0 (https://git.lumine.io/mythiccraft/model-engine-4/-/issues/116).

Caused by: java.lang.NoSuchFieldError: Class net.minecraft.server.level.ChunkMap does not have member field 'it.unimi.dsi.fastutil.ints.Int2ObjectMap entityMap'
        at ModelEngine-4.0.7.jar/com.ticxo.modelengine.v1_21_R1.entity.EntityHandlerImpl.wrapTrackedEntity(EntityHandlerImpl.java:517) ~[ModelEngine-4.0.7.jar:?]
        at ModelEngine-4.0.7.jar/com.ticxo.modelengine.api.entity.data.BukkitEntityData.<init>(BukkitEntityData.java:42) ~[ModelEngine-4.0.7.jar:?]
        at ModelEngine-4.0.7.jar/com.ticxo.modelengine.api.entity.BukkitEntity.createEntityData(BukkitEntity.java:50) ~[ModelEngine-4.0.7.jar:?]
        at ModelEngine-4.0.7.jar/com.ticxo.modelengine.api.entity.BukkitEntity.<init>(BukkitEntity.java:41) ~[ModelEngine-4.0.7.jar:?]
        at ModelEngine-4.0.7.jar/com.ticxo.modelengine.api.ModelEngineAPI.createModeledEntity(ModelEngineAPI.java:122) ~[ModelEngine-4.0.7.jar:?]
        at ModelEngine-4.0.7.jar/com.ticxo.modelengine.api.ModelEngineAPI.createModeledEntity(ModelEngineAPI.java:118) ~[ModelEngine-4.0.7.jar:?]
Unknowncommented

Solution :

public TrackedEntity wrapTrackedEntity(Entity entity) {
    if (foliaserver) {
        return this.getTrackedEntity(((CraftEntity) entity).getHandle());
    }
    ServerLevel level = ((CraftWorld)entity.getWorld()).getHandle();
    Map<Integer, ChunkMap.TrackedEntity> map = level.getChunkSource().chunkMap.entityMap;
    ChunkMap.TrackedEntity tracker = (ChunkMap.TrackedEntity)map.get(entity.getEntityId());
    return (TrackedEntity)(tracker == null ? new TempTrackedEntity(entity) : new TrackedEntityImpl(entity, () -> {
        return (ChunkMap.TrackedEntity)map.get(entity.getEntityId());
    }, tracker));
}

//(1.21)
private static @org.jetbrains.annotations.Nullable TrackedEntity getTrackedEntity(net.minecraft.world.entity.Entity entity) {
    try {
        java.lang.reflect.Field field = net.minecraft.world.entity.Entity.class.getDeclaredField("trackedEntity");
        field.setAccessible(true);
        Object trackerObject = field.get(entity);
        return (TrackedEntity) trackerObject;
    } catch (Exception exception) {
        exception.printStackTrace();
        return null;
    }
}

//(1.20)
private static @org.jetbrains.annotations.Nullable TrackedEntity getTrackedEntity(net.minecraft.world.entity.Entity entity) {
    try {
        java.lang.reflect.Field field = net.minecraft.world.entity.Entity.class.getDeclaredField("tracker");
        field.setAccessible(true);
        Object trackerObject = field.get(entity);
        return (TrackedEntity) trackerObject;
    } catch (Exception exception) {
        exception.printStackTrace();
        return null;
    }
}
Sign in to join the discussion.