Jump to content

Recommended Posts

Posted

I am still trying to get familiar with the forge systems and cannot for the life of me figure out why my .getCapability() is returning null. Granted, it's like 7am and I've not slept so apologies if this is a dumb error. Any help would be appreciated, attached are the logs and relevant code (I think that's everything relevant anyway).

SerializableCapabilityProvider

public class SerializableCapabilityProvider <HANDLER> extends SimpleCapabilityProvider<HANDLER> implements ICapabilitySerializable<INBT> {


    public SerializableCapabilityProvider(final Capability<HANDLER> capability, @Nullable final Direction facing) {
        this(capability, facing, capability.getDefaultInstance());
    }
    
    public SerializableCapabilityProvider(final Capability<HANDLER> capability, @Nullable final Direction facing, @Nullable final HANDLER instance) {
        super(capability, facing, instance);
    }

    @Nullable
    @Override
    public INBT serializeNBT() {
        final HANDLER instance = getInstance();

        if (instance == null) {
            return null;
        }

        return getCapability().writeNBT(instance, getFacing());
    }

    @Override
    public void deserializeNBT(final INBT nbt) {
        final HANDLER instance = getInstance();

        if (instance == null) {
            return;
        }

        getCapability().readNBT(instance, getFacing(), nbt);
    }

}


SimpleCapabilityProvider
 

public class SimpleCapabilityProvider <HANDLER> implements ICapabilityProvider {


    protected final Capability<HANDLER> capability;


    protected final Direction facing;

    protected final HANDLER instance;

    protected final LazyOptional<HANDLER> lazyOptional;

    public SimpleCapabilityProvider(final Capability<HANDLER> capability, @Nullable final Direction facing, @Nullable final HANDLER instance) {
        this.capability = capability;
        this.facing = facing;

        this.instance = instance;

        if (this.instance != null) {
            lazyOptional = LazyOptional.of(() -> this.instance);
        } else {
            lazyOptional = LazyOptional.empty();
        }
    }

    @Override
    public <T> LazyOptional<T> getCapability(final Capability<T> capability, @Nullable final Direction facing) {
        return getCapability().orEmpty(capability, lazyOptional);
    }

    public final Capability<HANDLER> getCapability() {
        return capability;
    }

    @Nullable
    public Direction getFacing() {
        return facing;
    }

    @Nullable
    public final HANDLER getInstance() {
        return instance;
    }
}


My registering method and attaching methods

public class EntityBaseStatsCapability {

    @CapabilityInject(IEntityStats.class)
    public static final Capability<IEntityStats> INSTANCE = null;
    private static final Direction DEFAULT_FACING = null;


    public static void register()
    {
        CapabilityManager.INSTANCE.register(IEntityStats.class, new Capability.IStorage<IEntityStats>()
        {

            @Override
            public INBT writeNBT(Capability<IEntityStats> capability, IEntityStats instance, Direction side)
            {
                CompoundNBT props = new CompoundNBT();
                props.putInt("power", instance.getPower());
                props.putLong("beli", instance.getBeli());
                props.putInt("gold", instance.getGold());
                props.putLong("bounty", instance.getBounty());
                props.putString("race", instance.getRace());
                props.putString("combatClass", instance.getCombatClass());
                props.putString("meleeSpecialization", instance.getMeleeSpecialization());
                props.putString("rangedSpecialization", instance.getRangedSpecialization());
                props.putString("weatherSpecialization", instance.getWeatherSpecialization());
                props.putString("unarmedSpecialization", instance.getUnarmedSpecialization());
                props.putString("doctorSpecialization", instance.getDoctorSpecialization());
                props.putLong("meleeExp", instance.getMeleeExp());
                props.putLong("rangedExp", instance.getRangedExp());
                props.putLong("weatherExp", instance.getWeatherExp());
                props.putLong("unarmedExp", instance.getUnarmedExp());
                props.putLong("doctorExp", instance.getDoctorExp());
                props.putInt("meleePoints", instance.getMeleePoints());
                props.putInt("rangedPoints", instance.getRangedPoints());
                props.putInt("weatherPoints", instance.getWeatherPoints());
                props.putInt("unarmedPoints", instance.getUnarmedPoints());
                props.putInt("doctorPoints", instance.getDoctorPoints());
                props.putString("faction", instance.getFaction());
                props.putString("factionRank", instance.getFactionRank());
                props.putLong("rankExp", instance.getRankExp());
                return props;
            }

            @Override
            public void readNBT(Capability<IEntityStats> capability, IEntityStats instance, Direction side, INBT nbt)
            {
                CompoundNBT props = (CompoundNBT) nbt;
                instance.setPower(props.getInt("power"));
                instance.setBeli(props.getLong("beli"));
                instance.setGold(props.getInt("gold"));
                instance.setBounty(props.getLong("bounty"));
                instance.setRace(props.getString("race"));
                instance.setCombatClass(props.getString("combatClass"));
                instance.setMeleeSpecialization(props.getString("meleeSpecialization"));
                instance.setRangedSpecialization(props.getString("rangedSpecialization"));
                instance.setWeatherSpecialization(props.getString("weatherSpecialization"));
                instance.setUnarmedSpecialization(props.getString("unarmedSpecialization"));
                instance.setDoctorSpecialization(props.getString("doctorSpecialization"));
                instance.setMeleeExp(props.getLong("meleeExp"));
                instance.setRangedExp(props.getLong("rangedExp"));
                instance.setWeatherExp(props.getLong("weatherExp"));
                instance.setUnarmedExp(props.getLong("unarmedExp"));
                instance.setDoctorExp(props.getLong("doctorExp"));
                instance.setMeleePoints(props.getInt("meleePoints"));
                instance.setRangedPoints(props.getInt("rangedPoints"));
                instance.setWeatherPoints(props.getInt("weatherPoints"));
                instance.setUnarmedPoints(props.getInt("unarmedPoints"));
                instance.setDoctorPoints(props.getInt("doctorPoints"));
                instance.setFaction(props.getString("faction"));
                instance.setFactionRank(props.getString("factionRank"));
                instance.setRankExp(props.getLong("rankExp"));
            }
        }, () -> new EntityBaseStats(null));

    }

    public static ICapabilityProvider createProvider(final IEntityStats entityStats) {
        return new SerializableCapabilityProvider<>(INSTANCE, DEFAULT_FACING, entityStats);
    }

    public static LazyOptional<IEntityStats> getEntityStats(final LivingEntity entity)
    {
        return entity.getCapability(INSTANCE, DEFAULT_FACING);
    }

    @Mod.EventBusSubscriber(modid = APIConfig.PROJECT_ID)
    private static class EventHandler {
        @SubscribeEvent
        public static void attachCapabilities(AttachCapabilitiesEvent<Entity> event) {
            if (event.getObject() == null)
                return;

            if (event.getObject() instanceof LivingEntity) {
                final EntityBaseStats entityStats = new EntityBaseStats((LivingEntity) event.getObject());
                event.addCapability(new ResourceLocation(APIConfig.PROJECT_ID), createProvider(entityStats));
            }
        }
    }
}

 

Crash Report

[06:40:42] [Worker-Main-15/INFO] [STDOUT/]: [net.minecraft.util.registry.Bootstrap:printToSYSOUT:130]: ---- Minecraft Crash Report ----
// I let you down. Sorry :(

Time: 15/12/20 6:40 AM
Description: Saving entity NBT

java.lang.NullPointerException: Saving entity NBT
	at taeda.OPRL.data.SerializableCapabilityProvider.serializeNBT(SerializableCapabilityProvider.java:31) ~[?:?] {re:classloading}
	at net.minecraftforge.common.capabilities.CapabilityDispatcher.serializeNBT(CapabilityDispatcher.java:127) ~[forge:?] {re:classloading}
	at net.minecraftforge.common.capabilities.CapabilityProvider.serializeCaps(CapabilityProvider.java:86) ~[forge:?] {re:classloading}
	at net.minecraft.entity.Entity.writeWithoutTypeId(Entity.java:1567) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.entity.Entity.writeUnlessRemoved(Entity.java:1493) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.entity.Entity.writeUnlessPassenger(Entity.java:1509) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.chunk.ChunkPrimer.addEntity(ChunkPrimer.java:219) ~[forge:?] {re:classloading}
	at net.minecraft.world.gen.WorldGenRegion.addEntity(WorldGenRegion.java:260) ~[forge:?] {re:classloading}
	at java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:419) ~[?:1.8.0_271] {}
	at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742) ~[?:1.8.0_271] {}
	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) ~[?:1.8.0_271] {}
	at net.minecraft.world.IServerWorld.func_242417_l(IServerWorld.java:10) ~[forge:?] {re:classloading}
	at net.minecraft.world.spawner.WorldEntitySpawner.performWorldGenSpawning(WorldEntitySpawner.java:372) ~[forge:?] {re:classloading}
	at net.minecraft.world.gen.NoiseChunkGenerator.func_230354_a_(NoiseChunkGenerator.java:626) ~[forge:?] {re:classloading}
	at net.minecraft.world.chunk.ChunkStatus.lambda$static$12(ChunkStatus.java:89) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.chunk.ChunkStatus$ISelectiveWorker.doWork(ChunkStatus.java:244) ~[forge:?] {re:classloading}
	at net.minecraft.world.chunk.ChunkStatus.doGenerationWork(ChunkStatus.java:198) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.server.ChunkManager.lambda$chunkGenerate$18(ChunkManager.java:541) ~[forge:?] {re:classloading}
	at com.mojang.datafixers.util.Either$Left.map(Either.java:38) ~[datafixerupper-4.0.26.jar:?] {re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading}
	at net.minecraft.world.server.ChunkManager.lambda$chunkGenerate$20(ChunkManager.java:539) ~[forge:?] {re:classloading}
	at java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:966) ~[?:1.8.0_271] {}
	at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:940) ~[?:1.8.0_271] {}
	at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:456) ~[?:1.8.0_271] {}
	at net.minecraft.world.chunk.ChunkTaskPriorityQueueSorter.lambda$func_219069_a$1(ChunkTaskPriorityQueueSorter.java:44) ~[forge:?] {re:classloading}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.driveOne(DelegatedTaskExecutor.java:88) ~[forge:?] {re:classloading}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.driveWhile(DelegatedTaskExecutor.java:132) ~[forge:?] {re:classloading}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.run(DelegatedTaskExecutor.java:100) ~[forge:?] {re:classloading}
	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1067) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1703) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:172) ~[?:1.8.0_271] {}


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Worker-Main-15
Stacktrace:
	at taeda.OPRL.data.SerializableCapabilityProvider.serializeNBT(SerializableCapabilityProvider.java:31) ~[?:?] {re:classloading}
	at net.minecraftforge.common.capabilities.CapabilityDispatcher.serializeNBT(CapabilityDispatcher.java:127) ~[forge:?] {re:classloading}
	at net.minecraftforge.common.capabilities.CapabilityProvider.serializeCaps(CapabilityProvider.java:86) ~[forge:?] {re:classloading}
-- Entity being saved --
Details:
	Entity Type: minecraft:sheep (net.minecraft.entity.passive.SheepEntity)
	Entity ID: 1
	Entity Name: Sheep
	Entity's Exact location: -118.00, 70.00, 198.00
	Entity's Block location: World: (-118,70,198), Chunk: (at 10,4,6 in -8,12; contains blocks -128,0,192 to -113,255,207), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511)
	Entity's Momentum: 0.00, 0.00, 0.00
	Entity's Passengers: []
	Entity's Vehicle: ~~ERROR~~ NullPointerException: null
Stacktrace:
	at net.minecraft.entity.Entity.writeWithoutTypeId(Entity.java:1567) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.entity.Entity.writeUnlessRemoved(Entity.java:1493) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.entity.Entity.writeUnlessPassenger(Entity.java:1509) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.chunk.ChunkPrimer.addEntity(ChunkPrimer.java:219) ~[forge:?] {re:classloading}
	at net.minecraft.world.gen.WorldGenRegion.addEntity(WorldGenRegion.java:260) ~[forge:?] {re:classloading}
	at java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:419) ~[?:1.8.0_271] {}
	at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742) ~[?:1.8.0_271] {}
	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) ~[?:1.8.0_271] {}
	at net.minecraft.world.IServerWorld.func_242417_l(IServerWorld.java:10) ~[forge:?] {re:classloading}
	at net.minecraft.world.spawner.WorldEntitySpawner.performWorldGenSpawning(WorldEntitySpawner.java:372) ~[forge:?] {re:classloading}
	at net.minecraft.world.gen.NoiseChunkGenerator.func_230354_a_(NoiseChunkGenerator.java:626) ~[forge:?] {re:classloading}
	at net.minecraft.world.chunk.ChunkStatus.lambda$static$12(ChunkStatus.java:89) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.chunk.ChunkStatus$ISelectiveWorker.doWork(ChunkStatus.java:244) ~[forge:?] {re:classloading}
	at net.minecraft.world.chunk.ChunkStatus.doGenerationWork(ChunkStatus.java:198) ~[forge:?] {re:classloading,pl:accesstransformer:B}


-- Chunk to be generated --
Details:
	Location: -8,12
	Position hash: 55834574840
	Generator: net.minecraft.world.gen.NoiseChunkGenerator@6fd409b
Stacktrace:
	at net.minecraft.world.server.ChunkManager.lambda$chunkGenerate$18(ChunkManager.java:541) ~[forge:?] {re:classloading}
	at com.mojang.datafixers.util.Either$Left.map(Either.java:38) ~[datafixerupper-4.0.26.jar:?] {re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading}
	at net.minecraft.world.server.ChunkManager.lambda$chunkGenerate$20(ChunkManager.java:539) ~[forge:?] {re:classloading}
	at java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:966) ~[?:1.8.0_271] {}
	at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:940) ~[?:1.8.0_271] {}
	at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:456) ~[?:1.8.0_271] {}
	at net.minecraft.world.chunk.ChunkTaskPriorityQueueSorter.lambda$func_219069_a$1(ChunkTaskPriorityQueueSorter.java:44) ~[forge:?] {re:classloading}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.driveOne(DelegatedTaskExecutor.java:88) ~[forge:?] {re:classloading}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.driveWhile(DelegatedTaskExecutor.java:132) ~[forge:?] {re:classloading}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.run(DelegatedTaskExecutor.java:100) ~[forge:?] {re:classloading}
	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1067) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1703) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:172) ~[?:1.8.0_271] {}


-- System Details --
Details:
	Minecraft Version: 1.16.4
	Minecraft Version ID: 1.16.4
	Operating System: Windows 10 (amd64) version 10.0
	Java Version: 1.8.0_271, Oracle Corporation
	Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
	Memory: 1267210720 bytes (1208 MB) / 1971847168 bytes (1880 MB) up to 3817865216 bytes (3641 MB)
	CPUs: 16
	JVM Flags: 2 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx4096m
	ModLauncher: 8.0.6+85+master.325de55
	ModLauncher launch target: fmluserdevclient
	ModLauncher naming: mcp
	ModLauncher services: 
		/mixin-0.8.2.jar mixin PLUGINSERVICE 
		/eventbus-3.0.5-service.jar eventbus PLUGINSERVICE 
		/forge-1.16.4-35.1.0_mapped_snapshot_20201028-1.16.3-launcher.jar object_holder_definalize PLUGINSERVICE 
		/forge-1.16.4-35.1.0_mapped_snapshot_20201028-1.16.3-launcher.jar runtime_enum_extender PLUGINSERVICE 
		/accesstransformers-2.2.0-shadowed.jar accesstransformer PLUGINSERVICE 
		/forge-1.16.4-35.1.0_mapped_snapshot_20201028-1.16.3-launcher.jar capability_inject_definalize PLUGINSERVICE 
		/forge-1.16.4-35.1.0_mapped_snapshot_20201028-1.16.3-launcher.jar runtimedistcleaner PLUGINSERVICE 
		/mixin-0.8.2.jar mixin TRANSFORMATIONSERVICE 
		/forge-1.16.4-35.1.0_mapped_snapshot_20201028-1.16.3-launcher.jar fml TRANSFORMATIONSERVICE 
	FML: 35.1
	Forge: net.minecraftforge:35.1.0
	FML Language Providers: 
		[email protected]
		minecraft@1
	Mod List: 
		client-extra.jar                                  |Minecraft                     |minecraft                     |1.16.4              |DONE      |a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0:de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f
		forge-1.16.4-35.1.0_mapped_snapshot_20201028-1.16.|Forge                         |forge                         |35.1.0              |DONE      |NOSIGNATURE
		main                                              |One Piece: Roger's Legacy     |oprl                          |0.0.01              |DONE      |NOSIGNATURE
	Crash Report UUID: f079221a-fc3d-457c-8053-600a7be078eb
[06:40:42] [Server thread/FATAL] [minecraft/ThreadTaskExecutor]: Error executing task on Chunk source main thread executor for minecraft:overworld
java.util.concurrent.CompletionException: net.minecraft.crash.ReportedException: Saving entity NBT
	at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273) ~[?:1.8.0_271] {}
	at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280) ~[?:1.8.0_271] {}
	at java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:975) ~[?:1.8.0_271] {}
	at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:940) ~[?:1.8.0_271] {}
	at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:456) ~[?:1.8.0_271] {}
	at net.minecraft.world.chunk.ChunkTaskPriorityQueueSorter.lambda$func_219069_a$1(ChunkTaskPriorityQueueSorter.java:44) ~[forge:?] {re:classloading}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.driveOne(DelegatedTaskExecutor.java:88) ~[forge:?] {re:classloading}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.driveWhile(DelegatedTaskExecutor.java:132) ~[forge:?] {re:classloading}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.run(DelegatedTaskExecutor.java:100) ~[forge:?] {re:classloading}
	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1067) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1703) ~[?:1.8.0_271] {}
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:172) ~[?:1.8.0_271] {}
Caused by: net.minecraft.crash.ReportedException: Saving entity NBT
	at net.minecraft.world.server.ChunkManager.lambda$chunkGenerate$18(ChunkManager.java:552) ~[forge:?] {re:classloading}
	at com.mojang.datafixers.util.Either$Left.map(Either.java:38) ~[datafixerupper-4.0.26.jar:?] {re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading}
	at net.minecraft.world.server.ChunkManager.lambda$chunkGenerate$20(ChunkManager.java:539) ~[forge:?] {re:classloading}
	at java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:966) ~[?:1.8.0_271] {}
	... 11 more
Caused by: java.lang.NullPointerException
	at taeda.OPRL.data.SerializableCapabilityProvider.serializeNBT(SerializableCapabilityProvider.java:31) ~[?:?] {re:classloading}
	at net.minecraftforge.common.capabilities.CapabilityDispatcher.serializeNBT(CapabilityDispatcher.java:127) ~[forge:?] {re:classloading}
	at net.minecraftforge.common.capabilities.CapabilityProvider.serializeCaps(CapabilityProvider.java:86) ~[forge:?] {re:classloading}
	at net.minecraft.entity.Entity.writeWithoutTypeId(Entity.java:1567) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.entity.Entity.writeUnlessRemoved(Entity.java:1493) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.entity.Entity.writeUnlessPassenger(Entity.java:1509) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.chunk.ChunkPrimer.addEntity(ChunkPrimer.java:219) ~[forge:?] {re:classloading}
	at net.minecraft.world.gen.WorldGenRegion.addEntity(WorldGenRegion.java:260) ~[forge:?] {re:classloading}
	at java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:419) ~[?:1.8.0_271] {}
	at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742) ~[?:1.8.0_271] {}
	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) ~[?:1.8.0_271] {}
	at net.minecraft.world.IServerWorld.func_242417_l(IServerWorld.java:10) ~[forge:?] {re:classloading}
	at net.minecraft.world.spawner.WorldEntitySpawner.performWorldGenSpawning(WorldEntitySpawner.java:372) ~[forge:?] {re:classloading}
	at net.minecraft.world.gen.NoiseChunkGenerator.func_230354_a_(NoiseChunkGenerator.java:626) ~[forge:?] {re:classloading}
	at net.minecraft.world.chunk.ChunkStatus.lambda$static$12(ChunkStatus.java:89) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.chunk.ChunkStatus$ISelectiveWorker.doWork(ChunkStatus.java:244) ~[forge:?] {re:classloading}
	at net.minecraft.world.chunk.ChunkStatus.doGenerationWork(ChunkStatus.java:198) ~[forge:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.server.ChunkManager.lambda$chunkGenerate$18(ChunkManager.java:541) ~[forge:?] {re:classloading}
	at com.mojang.datafixers.util.Either$Left.map(Either.java:38) ~[datafixerupper-4.0.26.jar:?] {re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading}
	at net.minecraft.world.server.ChunkManager.lambda$chunkGenerate$20(ChunkManager.java:539) ~[forge:?] {re:classloading}
	at java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:966) ~[?:1.8.0_271] {}
	... 11 more

Exception: java.util.ConcurrentModificationException thrown from the UncaughtExceptionHandler in thread "Worker-Main-20"

Exception: java.util.ConcurrentModificationException thrown from the UncaughtExceptionHandler in thread "Worker-Main-62"

Exception: java.util.ConcurrentModificationException thrown from the UncaughtExceptionHandler in thread "Worker-Main-153"

Process finished with exit code -1

 

Posted (edited)
23 minutes ago, diesieben07 said:

Where do you call EntityBaseStatsCapability.register?

public class OPRLMain
{

    private static final Logger LOGGER = LogManager.getLogger();

    public OPRLMain() {

        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::processIMC);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);
        MinecraftForge.EVENT_BUS.register(new OPRLKeybindings());
        MinecraftForge.EVENT_BUS.register(new EntityBaseStatsCapability());
    }

    private void setup(final FMLCommonSetupEvent event)
    {
        OPRLKeybindings.init();
        OPRLCapabilities.init();
        LOGGER.info("HELLO FROM PREINIT");
    }

    private void doClientStuff(final FMLClientSetupEvent event) {
        // do something that can only be done on the client

    }

    private void enqueueIMC(final InterModEnqueueEvent event)
    {
        // some example code to dispatch IMC to another mod
    }

    private void processIMC(final InterModProcessEvent event)
    {
        // some example code to receive and process InterModComms from other mods
    }
    // You can use SubscribeEvent and let the Event Bus discover methods to call

    @SubscribeEvent
    public void onServerStarting(FMLServerStartingEvent event) {
        // do something when the server starts
    }

    // You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD
    // Event bus for receiving Registry Events)
    @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)
    public static class RegistryEvents {
        @SubscribeEvent
        public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {
            // register a new block here
            LOGGER.info("HELLO from Register Block");
        }
    }
@Mod.EventBusSubscriber(modid = APIConfig.PROJECT_ID)
public class OPRLCapabilities {

    public static void init(){

        EntityBaseStatsCapability.register();
    }


}


Here you go, good sir

Edited by D_Captain
Posted
1 minute ago, diesieben07 said:

I am unable to reproduce the crash you showed with that repository.

However I do get a crash because this line will never work.

Huh,,,,weird. I guess I'll reclone my repo. Regarding the line, what's wrong with it?

Posted
2 minutes ago, diesieben07 said:

getEntityStats returns LazyOptional<IEntityStats>, which will never be an instance of IEntityStats.

Okay recloning the repo worked and its not crashing, strange. Anyway, this might be a dumb question but would there be anything wrong with making getEntityStats return IEntityStats?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.