Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

LK1905

Members
  • Joined

  • Last visited

Everything posted by LK1905

  1. But as far as I know, my packet and event handler are already supposed to sync it. Which is why I made this thread, to ask why they aren't.
  2. My GUI doesn't update the xp values. This is how I reference the player in my GUI: private PlayerEntity player = Minecraft.getInstance().player; private LazyOptional<ISkills> cap = player.getCapability(SkillCapability.SKILL_CAP); private ISkills skills = cap.orElse(null); Do I need to reference the Server Player instead? If so, how? Or Is the client player already supposed to know my server player data from my events/packets? If so, why aren't they working? They're in the OP.
  3. I changed that part to this: PlayerEntity player = (PlayerEntity) event.getSource().getTrueSource(); LazyOptional<ISkills> cap = player.getCapability(SkillCapability.SKILL_CAP); ISkills skills = cap.orElse(null); But now I can't gain xp at all. Is that the correct way of doing it?
  4. I added it into the AddXP method like this: if(entity instanceof PlayerEntity) { sync((ServerPlayerEntity) entity); } That didn't make any difference. Is that what you meant?
  5. This is probably a stupid question, but how would I do that? I tried adding it to SkillStorage the same way I have the getXP, getLevel and getStaticLevel methods, but that made no difference. Is that what you meant, or something different?
  6. I don't think there's anything wrong with the SkillStorage, as I can gain xp just fine, in the correct skills, the data is just reset to zero when i close and reopen the world. I also have the "Hitpoints" skill set to level 10 and 1154 xp by default. If I comment out my PlayerLoggedInEvent, the skill is correctly set to those values in game, and is reset to those values when I leave the world. But with the event enabled, both the level and xp values are set to 1 and 0.
  7. Hi, I'm having problems syncing my mod's capability data. There's no errors/crashes or anything, but my code doesn't appear to be doing anything, as reloading the world resets all data values to zero. so I was wondering if someone could look at my code to see if I'm doing anything wrong, or am missing anything. My event handler: package lk1905.gielinorcraft; import lk1905.gielinorcraft.api.skill.ISkills; import lk1905.gielinorcraft.capability.skill.SkillCapability; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.entity.player.PlayerEvent.PlayerChangedDimensionEvent; import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent; import net.minecraftforge.event.entity.player.PlayerEvent.PlayerRespawnEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @Mod.EventBusSubscriber(modid = Gielinorcraft.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) public class EventHandler { @SubscribeEvent public static void onPlayerClone(PlayerEvent.Clone event) { LazyOptional<ISkills> oldCap = event.getOriginal().getCapability(SkillCapability.SKILL_CAP, null); LazyOptional<ISkills> newCap = event.getPlayer().getCapability(SkillCapability.SKILL_CAP, null); ISkills oldSkills = oldCap.orElse(null); if(oldSkills != null) { ISkills newSkills = newCap.orElse(null); if(newSkills != null) { for(int i = 0; i < 26; i++) { newSkills.setXp(i, oldSkills.getXp(i)); newSkills.setStaticLevel(i, oldSkills.getStaticLevel(i)); newSkills.setLevel(i, oldSkills.getLevel(i)); } } } } @SubscribeEvent public static void onPlayerChangedDimensionEvent(PlayerChangedDimensionEvent event) { ServerPlayerEntity player = (ServerPlayerEntity) event.getPlayer(); if(!player.world.isRemote) { player.getCapability(SkillCapability.SKILL_CAP).ifPresent(c -> c.sync(player)); } } @SubscribeEvent public static void onRespawnEvent(PlayerRespawnEvent event) { if(!event.getPlayer().world.isRemote) { event.getPlayer().getCapability(SkillCapability.SKILL_CAP).ifPresent(c -> c.sync((ServerPlayerEntity) event.getPlayer())); } } @SubscribeEvent public static void onPlayerConnect(PlayerLoggedInEvent event) { ServerPlayerEntity player = (ServerPlayerEntity) event.getPlayer(); if(!player.world.isRemote) { player.getCapability(SkillCapability.SKILL_CAP).ifPresent(c -> c.sync(player)); } } } My packet handler: package lk1905.gielinorcraft.network; import java.util.List; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.server.MinecraftServer; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.fml.network.NetworkDirection; import net.minecraftforge.fml.network.NetworkRegistry; import net.minecraftforge.fml.network.simple.SimpleChannel; public class PacketHandler { private static final String PROTOCOL_VERSION = Integer.toString(1); private static final SimpleChannel HANDLER = NetworkRegistry.ChannelBuilder .named(new ResourceLocation("gielinorcraft", "main_channel")) .clientAcceptedVersions(PROTOCOL_VERSION::equals) .serverAcceptedVersions(PROTOCOL_VERSION::equals) .networkProtocolVersion(() -> PROTOCOL_VERSION) .simpleChannel(); public static void register() { int disc = 0; HANDLER.registerMessage(disc++, SkillsPacket.class, SkillsPacket::encode, SkillsPacket::decode, SkillsPacket.Handler::handle); } /** * Sends a packet to a specific player.<br> * Must be called server side. * */ public static void sendTo(Object msg, ServerPlayerEntity player) { if(!(player instanceof FakePlayer)) { HANDLER.sendTo(msg, player.connection.netManager, NetworkDirection.PLAY_TO_CLIENT); } } /** * Sends a packet to the server.<br> * Must be called client side. * */ public static void sendToServer(Object msg) { HANDLER.sendToServer(msg); } /**Server side.*/ public static void sendToAllPlayers(Object msg, MinecraftServer server) { List<ServerPlayerEntity> list = server.getPlayerList().getPlayers(); for(ServerPlayerEntity e : list) { sendTo(msg, e); } } } The packet class for my capability: package lk1905.gielinorcraft.network; import java.util.function.Supplier; import lk1905.gielinorcraft.capability.skill.SkillCapability; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundNBT; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; public class SkillsPacket { private final CompoundNBT nbt; public SkillsPacket(CompoundNBT nbt) { this.nbt = nbt; } public static void encode(SkillsPacket msg, PacketBuffer buf) { buf.writeCompoundTag(msg.nbt); } public static SkillsPacket decode(PacketBuffer buf) { return new SkillsPacket(buf.readCompoundTag()); } public static class Handler{ public static void handle(final SkillsPacket msg, Supplier<NetworkEvent.Context> ctx) { Minecraft mc = Minecraft.getInstance(); ctx.get().enqueueWork(() -> { mc.player.getCapability(SkillCapability.SKILL_CAP).ifPresent(cap -> cap.deserializeNBT(msg.nbt)); }); ctx.get().setPacketHandled(true); } } } All other code is here.
  8. I added this after @Mod.EventBusSubscriber @Mod.EventBusSubscriber(modid = Gielinorcraft.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) And now everything works, thank you!
  9. No, I'm not sure. This is my Main class: package com.lk1905.gielinorcraft; import org.apache.logging.log4j.Logger; import com.lk1905.gielinorcraft.api.skills.Skill; import com.lk1905.gielinorcraft.capability.skill.CapabilitySkills; import com.lk1905.gielinorcraft.capability.skill.SkillContainer; import com.lk1905.gielinorcraft.skills.AttackSkill; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; @Mod(Gielinorcraft.MODID) @Mod.EventBusSubscriber public class Gielinorcraft { public static Logger logger; public static final String MODID = "gielinorcraft"; public Gielinorcraft() { } @SubscribeEvent public static void onCommonSetup(FMLCommonSetupEvent e) { CapabilitySkills.register(); SkillContainer.registerNewSkill(AttackSkill.class); MinecraftForge.EVENT_BUS.register(Skill.class); MinecraftForge.EVENT_BUS.register(AttackSkill.class); } } Is that how its supposed to be added? Or is there something else I need to do?
  10. You're right, when I try to open a second world I get this crash: Description: Exception in server tick loop java.lang.IllegalArgumentException: Cannot register a capability implementation multiple times : com.lk1905.gielinorcraft.api.capability.ISkillContainer at net.minecraftforge.common.capabilities.CapabilityManager.register(CapabilityManager.java:72) ~[forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-recomp.jar:?] {re:classloading} at com.lk1905.gielinorcraft.capability.skill.CapabilitySkills.register(CapabilitySkills.java:26) ~[main/:?] {re:classloading} at com.lk1905.gielinorcraft.Gielinorcraft.serverStarting(Gielinorcraft.java:42) ~[main/:?] {re:classloading} at net.minecraftforge.eventbus.ASMEventHandler_2_Gielinorcraft_serverStarting_FMLServerStartingEvent.invoke(.dynamic) ~[?:?] {} at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:80) ~[eventbus-2.0.0-milestone.1-service.jar:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:258) ~[eventbus-2.0.0-milestone.1-service.jar:?] {} at net.minecraftforge.fml.server.ServerLifecycleHooks.handleServerStarting(ServerLifecycleHooks.java:90) ~[?:?] {re:classloading} at net.minecraft.server.integrated.IntegratedServer.init(IntegratedServer.java:101) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:635) [?:?] {re:classloading,pl:accesstransformer:B} at java.lang.Thread.run(Thread.java:745) [?:1.8.0_66] {}
  11. I tried moving it back, and now i get this crash: Description: Loading entity NBT java.lang.NullPointerException: Loading entity NBT at com.lk1905.gielinorcraft.capability.CommonCapabilityProvider.deserializeNBT(CommonCapabilityProvider.java:51) ~[?:?] {re:classloading} at net.minecraftforge.common.capabilities.CapabilityDispatcher.deserializeNBT(CapabilityDispatcher.java:139) ~[?:?] {re:classloading} at net.minecraftforge.common.capabilities.CapabilityProvider.deserializeCaps(CapabilityProvider.java:96) ~[?:?] {re:classloading} at net.minecraft.entity.Entity.read(Entity.java:1600) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.management.PlayerList.readPlayerDataFromFile(PlayerList.java:272) ~[?:?] {re:classloading} at net.minecraft.server.management.PlayerList.initializeConnectionToPlayer(PlayerList.java:112) ~[?:?] {re:classloading} at net.minecraft.network.login.ServerLoginNetHandler.tryAcceptPlayer(ServerLoginNetHandler.java:119) ~[?:?] {re:classloading} at net.minecraft.network.login.ServerLoginNetHandler.tick(ServerLoginNetHandler.java:63) ~[?:?] {re:classloading} at net.minecraft.network.NetworkManager.tick(NetworkManager.java:241) ~[?:?] {re:classloading} at net.minecraft.network.NetworkSystem.tick(NetworkSystem.java:148) ~[?:?] {re:classloading} at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:900) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:818) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:120) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:659) ~[?:?] {re:classloading,pl:accesstransformer:B} at java.lang.Thread.run(Thread.java:745) ~[?:1.8.0_66] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Stacktrace: at com.lk1905.gielinorcraft.capability.CommonCapabilityProvider.deserializeNBT(CommonCapabilityProvider.java:51) at net.minecraftforge.common.capabilities.CapabilityDispatcher.deserializeNBT(CapabilityDispatcher.java:139) at net.minecraftforge.common.capabilities.CapabilityProvider.deserializeCaps(CapabilityProvider.java:96) -- Entity being loaded -- Details: Entity Type: minecraft:player (net.minecraft.entity.player.ServerPlayerEntity) Entity ID: 260 Entity Name: Dev Entity's Exact location: -99.06, 64.00, 174.46 Entity's Block location: World: (-100,64,174), Chunk: (at 12,4,14 in -7,10; contains blocks -112,0,160 to -97,255,175), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511) Entity's Momentum: 0.00, -0.08, 0.00 Entity's Passengers: [] Entity's Vehicle: ~~ERROR~~ NullPointerException: null Stacktrace: at net.minecraft.entity.Entity.read(Entity.java:1600) at net.minecraft.server.management.PlayerList.readPlayerDataFromFile(PlayerList.java:272) at net.minecraft.server.management.PlayerList.initializeConnectionToPlayer(PlayerList.java:112) at net.minecraft.network.login.ServerLoginNetHandler.tryAcceptPlayer(ServerLoginNetHandler.java:119) at net.minecraft.network.login.ServerLoginNetHandler.tick(ServerLoginNetHandler.java:63) at net.minecraft.network.NetworkManager.tick(NetworkManager.java:241) -- Ticking connection -- Details: Connection: net.minecraft.network.NetworkManager@7b4641db Stacktrace: at net.minecraft.network.NetworkSystem.tick(NetworkSystem.java:148) at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:900) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:818) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:120) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:659) at java.lang.Thread.run(Thread.java:745) -- System Details -- Details: Minecraft Version: 1.15.2 Minecraft Version ID: 1.15.2 Operating System: Windows 10 (amd64) version 10.0 Java Version: 1.8.0_66, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 259039432 bytes (247 MB) / 643301376 bytes (613 MB) up to 820510720 bytes (782 MB) CPUs: 4 JVM Flags: 1 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump ModLauncher: 5.0.0-milestone.4+67+b1a340b ModLauncher launch target: fmluserdevclient ModLauncher naming: mcp ModLauncher services: /eventbus-2.0.0-milestone.1-service.jar eventbus PLUGINSERVICE /forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar object_holder_definalize PLUGINSERVICE /forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar runtime_enum_extender PLUGINSERVICE /accesstransformers-2.0.0-milestone.1-shadowed.jar accesstransformer PLUGINSERVICE /forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar capability_inject_definalize PLUGINSERVICE /forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar runtimedistcleaner PLUGINSERVICE /forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar fml TRANSFORMATIONSERVICE FML: 31.1 Forge: net.minecraftforge:31.1.0 FML Language Providers: [email protected] minecraft@1 Mod List: client-extra.jar Minecraft {[email protected] DONE} forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-recomp.jar Forge {[email protected] DONE} main Gielinorcraft {[email protected] DONE} Player Count: 0 / 8; [] Data Packs: vanilla, mod:forge (incompatible), mod:gielinorcraft (incompatible) Type: Integrated Server (map_client.txt) Is Modded: Definitely; Client brand changed to 'forge' Instead of "saving Entity NBT", I now have a problem with "Loading Entity NBT". When I had the capability registered in FMLServerStartingEvent, I had no problem.
  12. I solved the problem. It had nothing to do with the Capability or the Provider class, but with how I was registering it in my Main class. I had the Capability registered under FMLCommonEvent, when I should have registered it under a FMLServerStartingEvent. So anyway, Problem Solved!
  13. I'm working on a capability that should allow me to create rpg-like skills, and I need to save the data from those skills to the player. This is my CapabilitySkills class, in case the problem is actually in there: package com.lk1905.gielinorcraft.capability.skill; import com.lk1905.gielinorcraft.api.capability.ISkillContainer; import com.lk1905.gielinorcraft.api.utils.CapabilityUtils; import com.lk1905.gielinorcraft.capability.CommonCapabilityProvider; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.CapabilityInject; import net.minecraftforge.common.capabilities.CapabilityManager; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @Mod.EventBusSubscriber public class CapabilitySkills { @CapabilityInject(ISkillContainer.class) private static Capability<ISkillContainer> skillContainerCapability; public static void register() { CapabilityManager.INSTANCE.register(ISkillContainer.class, new SkillStorage(), () -> new SkillContainer());//<---THIS LINE } @SubscribeEvent public static void attachCapability(AttachCapabilitiesEvent<Entity> e) { if(!(e.getObject() instanceof PlayerEntity)) { return; } SkillContainer newContainer = new SkillContainer(); e.addCapability(newContainer.getCapabilityID(), new CommonCapabilityProvider<>(skillContainerCapability, null, newContainer)); } @SubscribeEvent public static void onPlayerClone(final PlayerEvent.Clone e) { ISkillContainer oldCapability = (ISkillContainer) CapabilityUtils.getCapability(e.getOriginal(), skillContainerCapability); ISkillContainer newCapability = (ISkillContainer) CapabilityUtils.getCapability(e.getPlayer(), skillContainerCapability); newCapability.setAllSkills(oldCapability.getAllSkills()); } public static ISkillContainer getSkillContainer(ICapabilityProvider provider) { return (ISkillContainer) CapabilityUtils.getCapability(provider, skillContainerCapability); } public static Capability<ISkillContainer> getSkillCapability(){ return skillContainerCapability; } }
  14. Hello, I've been stuck on a problem that I don't know how to fix. Crash report: Description: Saving entity NBT java.lang.NullPointerException: Saving entity NBT at com.lk1905.gielinorcraft.capability.CommonCapabilityProvider.serializeNBT(CommonCapabilityProvider.java:45) ~[?:?] {re:classloading} at net.minecraftforge.common.capabilities.CapabilityDispatcher.serializeNBT(CapabilityDispatcher.java:127) ~[?:?] {re:classloading} at net.minecraftforge.common.capabilities.CapabilityProvider.serializeCaps(CapabilityProvider.java:86) ~[?:?] {re:classloading} at net.minecraft.entity.Entity.writeWithoutTypeId(Entity.java:1523) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:27) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.server.management.PlayerList.saveAllPlayerData(PlayerList.java:631) ~[?:?] {re:classloading} at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:114) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:659) [?:?] {re:classloading,pl:accesstransformer:B} at java.lang.Thread.run(Thread.java:745) [?:1.8.0_66] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Server thread Stacktrace: at com.lk1905.gielinorcraft.capability.CommonCapabilityProvider.serializeNBT(CommonCapabilityProvider.java:45) at net.minecraftforge.common.capabilities.CapabilityDispatcher.serializeNBT(CapabilityDispatcher.java:127) at net.minecraftforge.common.capabilities.CapabilityProvider.serializeCaps(CapabilityProvider.java:86) -- Entity being saved -- Details: Entity Type: minecraft:player (net.minecraft.entity.player.ServerPlayerEntity) Entity ID: 435 Entity Name: Dev Entity's Exact location: -229.50, 64.00, -165.50 Entity's Block location: World: (-230,64,-166), Chunk: (at 10,4,10 in -15,-11; contains blocks -240,0,-176 to -225,255,-161), Region: (-1,-1; contains chunks -32,-32 to -1,-1, blocks -512,0,-512 to -1,255,-1) Entity's Momentum: 0.00, -0.08, 0.00 Entity's Passengers: [] Entity's Vehicle: ~~ERROR~~ NullPointerException: null Stacktrace: at net.minecraft.entity.Entity.writeWithoutTypeId(Entity.java:1523) at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:27) at net.minecraft.server.management.PlayerList.saveAllPlayerData(PlayerList.java:631) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:114) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:659) at java.lang.Thread.run(Thread.java:745) -- System Details -- Details: Minecraft Version: 1.15.2 Minecraft Version ID: 1.15.2 Operating System: Windows 10 (amd64) version 10.0 Java Version: 1.8.0_66, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 249239288 bytes (237 MB) / 651689984 bytes (621 MB) up to 820510720 bytes (782 MB) CPUs: 4 JVM Flags: 1 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump ModLauncher: 5.0.0-milestone.4+67+b1a340b ModLauncher launch target: fmluserdevclient ModLauncher naming: mcp ModLauncher services: /eventbus-2.0.0-milestone.1-service.jar eventbus PLUGINSERVICE /forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar object_holder_definalize PLUGINSERVICE /forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar runtime_enum_extender PLUGINSERVICE /accesstransformers-2.0.0-milestone.1-shadowed.jar accesstransformer PLUGINSERVICE /forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar capability_inject_definalize PLUGINSERVICE /forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar runtimedistcleaner PLUGINSERVICE /forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar fml TRANSFORMATIONSERVICE FML: 31.1 Forge: net.minecraftforge:31.1.0 FML Language Providers: [email protected] minecraft@1 Mod List: client-extra.jar Minecraft {[email protected] DONE} forge-1.15.2-31.1.0_mapped_snapshot_20190719-1.14.3-recomp.jar Forge {[email protected] DONE} main Gielinorcraft {[email protected] DONE} Player Count: 1 / 8; [ServerPlayerEntity['Dev'/435, l='New World', x=-229.50, y=64.00, z=-165.50]] Data Packs: vanilla, mod:forge (incompatible), mod:gielinorcraft (incompatible) Type: Integrated Server (map_client.txt) Is Modded: Definitely; Client brand changed to 'forge' CommonCapabilityProvider.java package com.lk1905.gielinorcraft.capability; import javax.annotation.Nullable; import net.minecraft.nbt.INBT; import net.minecraft.util.Direction; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ICapabilitySerializable; import net.minecraftforge.common.util.LazyOptional; public class CommonCapabilityProvider<HANDLER> implements ICapabilitySerializable<INBT>{ protected final Capability<HANDLER> capability; protected final Direction side; protected final HANDLER instance; protected final LazyOptional<HANDLER> lazyOptional; public CommonCapabilityProvider(final Capability<HANDLER> capability, @Nullable final Direction side, @Nullable final HANDLER instance) { this.capability = capability; this.side = side; 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> cap, @Nullable final Direction side) { return capability.orEmpty(cap, lazyOptional); } @Nullable @Override public INBT serializeNBT() { return capability.writeNBT(getInstance(), getFacing());//<-- THIS LINE } @Override public void deserializeNBT(INBT nbt) { capability.readNBT(getInstance(), getFacing(), nbt); } @Nullable public Direction getFacing() { return side; } @Nullable public HANDLER getInstance() { return instance; } } Other code if you need to see it is here: https://github.com/LK1905/GielinorCraft
  15. I tried removing the second getCapability() constructor(the one that returns capability) and referring to capability directly. Made no difference. Also added the @Nullable annotation to see if that did anything. Made no difference either. Current code for CommonCapabilityProvider.java package com.lk1905.gielinorcraft.capability; import javax.annotation.Nullable; import net.minecraft.nbt.INBT; import net.minecraft.util.Direction; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ICapabilitySerializable; import net.minecraftforge.common.util.LazyOptional; public class CommonCapabilityProvider<HANDLER> implements ICapabilitySerializable<INBT>{ protected final Capability<HANDLER> capability; protected final Direction side; protected final HANDLER instance; protected final LazyOptional<HANDLER> lazyOptional; public CommonCapabilityProvider(final Capability<HANDLER> capability, @Nullable final Direction side, @Nullable final HANDLER instance) { this.capability = capability; this.side = side; 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> cap, @Nullable final Direction side) { return capability.orEmpty(cap, lazyOptional); } @Nullable @Override public INBT serializeNBT() { return capability.writeNBT(getInstance(), getFacing());//<-- THIS LINE } @Override public void deserializeNBT(INBT nbt) { capability.readNBT(getInstance(), getFacing(), nbt); } @Nullable public Direction getFacing() { return side; } @Nullable public HANDLER getInstance() { return instance; } }
  16. I solved the problem. I was trying to register my capabilities in my Main class like this: public Gielinorcraft() { CapabilitySkills.register(); SkillContainer.registerNewSkill(AttackSkill.class); MinecraftForge.EVENT_BUS.register(AttackSkill.class); } When i should have been registering them in a FMLCommonSetupEvent, like this: public Gielinorcraft() { } @SubscribeEvent public static void onCommonSetup(FMLCommonSetupEvent e) { CapabilitySkills.register(); SkillContainer.registerNewSkill(AttackSkill.class); MinecraftForge.EVENT_BUS.register(AttackSkill.class); } I can now load Minecraft. However, I now have another problem. When I try to load a world, I get this error: [16Feb2020 17:53:25.510] [Server thread/ERROR] [net.minecraft.server.MinecraftServer/]: Encountered an unexpected exception net.minecraft.crash.ReportedException: Saving entity NBT at net.minecraft.entity.Entity.writeWithoutTypeId(Entity.java:1592) ~[?:?] at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:27) ~[?:?] at net.minecraft.server.management.PlayerList.saveAllPlayerData(PlayerList.java:626) ~[?:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:112) ~[?:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:646) [?:?] at java.lang.Thread.run(Unknown Source) [?:1.8.0_161] Caused by: java.lang.NullPointerException at com.lk1905.gielinorcraft.capability.CommonCapabilityProvider.serializeNBT(CommonCapabilityProvider.java:49) ~[?:?] at net.minecraftforge.common.capabilities.CapabilityDispatcher.serializeNBT(CapabilityDispatcher.java:127) ~[?:?] at net.minecraftforge.common.capabilities.CapabilityProvider.serializeCaps(CapabilityProvider.java:86) ~[?:?] at net.minecraft.entity.Entity.writeWithoutTypeId(Entity.java:1567) ~[?:?] ... 5 more [16Feb2020 17:53:25.670] [Server thread/ERROR] [net.minecraft.server.MinecraftServer/]: This crash report has been saved to: C:\Users\Liam\eclipse-workspace\Gielinorcraft\run\.\crash-reports\crash-2020-02-16_17.53.25-server.txt [16Feb2020 17:53:25.690] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Stopping server [16Feb2020 17:53:25.693] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving players [16Feb2020 17:53:25.695] [Server thread/ERROR] [net.minecraft.server.MinecraftServer/]: Exception stopping the server net.minecraft.crash.ReportedException: Saving entity NBT at net.minecraft.entity.Entity.writeWithoutTypeId(Entity.java:1592) ~[?:?] at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:27) ~[?:?] at net.minecraft.server.management.PlayerList.saveAllPlayerData(PlayerList.java:626) ~[?:?] at net.minecraft.server.MinecraftServer.stopServer(MinecraftServer.java:559) ~[?:?] at net.minecraft.server.integrated.IntegratedServer.stopServer(IntegratedServer.java:235) ~[?:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:685) [?:?] at java.lang.Thread.run(Unknown Source) [?:1.8.0_161] Caused by: java.lang.NullPointerException at com.lk1905.gielinorcraft.capability.CommonCapabilityProvider.serializeNBT(CommonCapabilityProvider.java:49) ~[?:?] at net.minecraftforge.common.capabilities.CapabilityDispatcher.serializeNBT(CapabilityDispatcher.java:127) ~[?:?] at net.minecraftforge.common.capabilities.CapabilityProvider.serializeCaps(CapabilityProvider.java:86) ~[?:?] at net.minecraft.entity.Entity.writeWithoutTypeId(Entity.java:1567) ~[?:?] ... 6 more [16Feb2020 17:53:27.042] [Client thread/INFO] [STDOUT/]: [net.minecraft.util.registry.Bootstrap:printToSYSOUT:106]: ---- Minecraft Crash Report ---- // Hey, that tickles! Hehehe! Time: 16/02/20 5:53 PM Description: Saving entity NBT java.lang.NullPointerException: Saving entity NBT at com.lk1905.gielinorcraft.capability.CommonCapabilityProvider.serializeNBT(CommonCapabilityProvider.java:49) ~[?:?] {} at net.minecraftforge.common.capabilities.CapabilityDispatcher.serializeNBT(CapabilityDispatcher.java:127) ~[?:?] {} at net.minecraftforge.common.capabilities.CapabilityProvider.serializeCaps(CapabilityProvider.java:86) ~[?:?] {} at net.minecraft.entity.Entity.writeWithoutTypeId(Entity.java:1567) ~[?:?] {pl:accesstransformer:B} at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:27) ~[?:?] {pl:runtimedistcleaner:A} at net.minecraft.server.management.PlayerList.saveAllPlayerData(PlayerList.java:626) ~[?:?] {} at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:112) ~[?:?] {pl:runtimedistcleaner:A} at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:646) ~[?:?] {pl:accesstransformer:B} at java.lang.Thread.run(Unknown Source) ~[?:1.8.0_161] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Client thread Stacktrace: at com.lk1905.gielinorcraft.capability.CommonCapabilityProvider.serializeNBT(CommonCapabilityProvider.java:49) at net.minecraftforge.common.capabilities.CapabilityDispatcher.serializeNBT(CapabilityDispatcher.java:127) at net.minecraftforge.common.capabilities.CapabilityProvider.serializeCaps(CapabilityProvider.java:86) -- Entity being saved -- Details: Entity Type: minecraft:player (net.minecraft.entity.player.ServerPlayerEntity) Entity ID: 103 Entity Name: Dev Entity's Exact location: 106.12, 64.00, 258.45 Entity's Block location: World: (106,64,258), Chunk: (at 10,4,2 in 6,16; contains blocks 96,0,256 to 111,255,271), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511) Entity's Momentum: 0.00, -0.08, 0.00 Entity's Passengers: [] Entity's Vehicle: ~~ERROR~~ NullPointerException: null Stacktrace: at net.minecraft.entity.Entity.writeWithoutTypeId(Entity.java:1567) at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:27) at net.minecraft.server.management.PlayerList.saveAllPlayerData(PlayerList.java:626) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:112) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:646) at java.lang.Thread.run(Unknown Source) -- System Details -- Details: Minecraft Version: 1.14.4 Minecraft Version ID: 1.14.4 Operating System: Windows 10 (amd64) version 10.0 Java Version: 1.8.0_161, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 187450632 bytes (178 MB) / 598736896 bytes (571 MB) up to 820510720 bytes (782 MB) CPUs: 4 JVM Flags: 1 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump ModLauncher: 3.2.0+60+b86c1d4 ModLauncher launch target: fmluserdevclient ModLauncher naming: mcp ModLauncher services: /eventbus-1.0.0-service.jar eventbus PLUGINSERVICE /forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar object_holder_definalize PLUGINSERVICE /forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar runtime_enum_extender PLUGINSERVICE /accesstransformers-1.0.0-shadowed.jar accesstransformer PLUGINSERVICE /forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar capability_inject_definalize PLUGINSERVICE /forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar runtimedistcleaner PLUGINSERVICE /forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-launcher.jar fml TRANSFORMATIONSERVICE FML: 28.1 Forge: net.minecraftforge:28.1.0 FML Language Providers: [email protected] minecraft@1 Mod List: forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-recomp.jar Forge {[email protected] DONE} main Gielinorcraft {[email protected] DONE} client-extra.jar Minecraft {[email protected] DONE} Player Count: 1 / 8; [ServerPlayerEntity['Dev'/103, l='Test world', x=106.12, y=64.00, z=258.45]] Data Packs: vanilla, mod:gielinorcraft, mod:forge Type: Integrated Server (map_client.txt) Is Modded: Definitely; Client brand changed to 'forge' [16Feb2020 17:53:27.044] [Client thread/INFO] [STDOUT/]: [net.minecraft.util.registry.Bootstrap:printToSYSOUT:106]: #@!@# Game crashed! Crash report saved to: #@!@# .\crash-reports\crash-2020-02-16_17.53.25-server.txt CommonCapabilityProvider.java: package com.lk1905.gielinorcraft.capability; import net.minecraft.nbt.INBT; import net.minecraft.util.Direction; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ICapabilitySerializable; import net.minecraftforge.common.util.LazyOptional; public class CommonCapabilityProvider<HANDLER> implements ICapabilitySerializable<INBT>{ protected final Capability<HANDLER> capability; protected final Direction side; protected final HANDLER instance; protected final LazyOptional<HANDLER> lazyOptional; public CommonCapabilityProvider(Capability<HANDLER> capability, Direction side, HANDLER instance) { this.capability = capability; this.side = side; this.instance = instance; if(this.instance != null) { lazyOptional = LazyOptional.of(() -> this.instance); }else { lazyOptional = LazyOptional.empty(); } } @Override public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) { return getCapability().orEmpty(cap, lazyOptional); } public final Capability<HANDLER> getCapability(){ return capability; } @Override public INBT serializeNBT() { return getCapability().writeNBT(getInstance(), getFacing());//<-- THIS LINE } @Override public void deserializeNBT(INBT nbt) { getCapability().readNBT(getInstance(), getFacing(), nbt); } public Direction getFacing() { return side; } public HANDLER getInstance() { return instance; } } Can anyone see what I'm doing wrong in this class?
  17. My Github: https://github.com/LK1905/GielinorCraft Log: [16Feb2020 10:24:40.474] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--gameDir, ., --launchTarget, fmluserdevclient, --fml.mcpVersion, 20190829.143755, --fml.mcVersion, 1.14.4, --fml.forgeGroup, net.minecraftforge, --fml.forgeVersion, 28.1.0, --version, MOD_DEV, --assetIndex, 1.14, --assetsDir, C:\Users\Liam\.gradle\caches\forge_gradle\assets, --username, Dev, --accessToken, ????????, --userProperties, {}] [16Feb2020 10:24:40.505] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 3.2.0+60+b86c1d4 starting: java version 1.8.0_161 by Oracle Corporation [16Feb2020 10:24:44.057] [main/INFO] [net.minecraftforge.fml.loading.FixSSL/CORE]: Added Lets Encrypt root certificates as additional trust [16Feb2020 10:24:51.727] [main/INFO] [cpw.mods.modlauncher.LaunchServiceHandler/MODLAUNCHER]: Launching target 'fmluserdevclient' with arguments [--version, MOD_DEV, --gameDir, ., --assetsDir, C:\Users\Liam\.gradle\caches\forge_gradle\assets, --assetIndex, 1.14, --username, Dev, --accessToken, ????????, --userProperties, {}] [16Feb2020 10:25:15.154] [Client thread/INFO] [net.minecraft.client.Minecraft/]: Setting user: Dev [16Feb2020 10:26:15.541] [Client thread/WARN] [net.minecraft.client.GameSettings/]: Skipping bad option: lastServer: [16Feb2020 10:26:15.895] [Client thread/INFO] [net.minecraft.client.Minecraft/]: LWJGL Version: 3.2.2 build 10 [16Feb2020 10:26:39.403] [modloading-worker-2/INFO] [net.minecraftforge.common.ForgeMod/FORGEMOD]: Forge mod loading, version 28.1.0, for MC 1.14.4 with MCP 20190829.143755 [16Feb2020 10:26:39.404] [modloading-worker-2/INFO] [net.minecraftforge.common.MinecraftForge/FORGE]: MinecraftForge v28.1.0 Initialized [16Feb2020 10:26:39.809] [modloading-worker-1/ERROR] [net.minecraftforge.fml.javafmlmod.FMLModContainer/LOADING]: Failed to create mod instance. ModID: gielinorcraft, class com.lk1905.gielinorcraft.Gielinorcraft java.lang.NullPointerException: null at net.minecraftforge.common.capabilities.CapabilityManager.register(CapabilityManager.java:79) ~[?:?] at com.lk1905.gielinorcraft.capability.skill.CapabilitySkills.register(CapabilitySkills.java:26) ~[?:?] at com.lk1905.gielinorcraft.Gielinorcraft.<init>(Gielinorcraft.java:21) ~[?:?] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_161] at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_161] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_161] at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_161] at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_161] at net.minecraftforge.fml.javafmlmod.FMLModContainer.constructMod(FMLModContainer.java:131) ~[?:28.1] at java.util.function.Consumer.lambda$andThen$0(Unknown Source) ~[?:1.8.0_161] at java.util.function.Consumer.lambda$andThen$0(Unknown Source) ~[?:1.8.0_161] at net.minecraftforge.fml.ModContainer.transitionState(ModContainer.java:112) ~[?:?] at net.minecraftforge.fml.ModList.lambda$null$10(ModList.java:133) ~[?:?] at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source) ~[?:1.8.0_161] at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source) ~[?:1.8.0_161] at java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[?:1.8.0_161] at java.util.stream.ForEachOps$ForEachTask.compute(Unknown Source) ~[?:1.8.0_161] at java.util.concurrent.CountedCompleter.exec(Unknown Source) ~[?:1.8.0_161] at java.util.concurrent.ForkJoinTask.doExec(Unknown Source) ~[?:1.8.0_161] at java.util.concurrent.ForkJoinTask.doInvoke(Unknown Source) ~[?:1.8.0_161] at java.util.concurrent.ForkJoinTask.invoke(Unknown Source) ~[?:1.8.0_161] at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(Unknown Source) ~[?:1.8.0_161] at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(Unknown Source) ~[?:1.8.0_161] at java.util.stream.AbstractPipeline.evaluate(Unknown Source) ~[?:1.8.0_161] at java.util.stream.ReferencePipeline.forEach(Unknown Source) ~[?:1.8.0_161] at java.util.stream.ReferencePipeline$Head.forEach(Unknown Source) ~[?:1.8.0_161] at net.minecraftforge.fml.ModList.lambda$dispatchParallelEvent$11(ModList.java:133) ~[?:?] at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinTask.doExec(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source) [?:1.8.0_161] [16Feb2020 10:26:41.171] [Client thread/FATAL] [net.minecraftforge.fml.ModLoader/LOADING]: Failed to complete lifecycle event CONSTRUCT, 1 errors found [16Feb2020 10:26:41.172] [Client thread/FATAL] [net.minecraftforge.eventbus.EventBus/EVENTBUS]: EventBus 0 shutting down - future events will not be posted. java.lang.Exception: stacktrace at net.minecraftforge.eventbus.EventBus.shutdown(EventBus.java:278) ~[eventbus-1.0.0-service.jar:?] at net.minecraftforge.fml.client.ClientModLoader.lambda$createRunnableWithCatch$5(ClientModLoader.java:97) ~[forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-recomp.jar:?] at net.minecraftforge.fml.client.ClientModLoader.begin(ClientModLoader.java:79) ~[forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-recomp.jar:?] at net.minecraft.client.Minecraft.init(Minecraft.java:456) ~[forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-recomp.jar:?] at net.minecraft.client.Minecraft.run(Minecraft.java:365) ~[forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-recomp.jar:?] at net.minecraft.client.main.Main.main(Main.java:128) ~[forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-recomp.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_161] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_161] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_161] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_161] at net.minecraftforge.userdev.FMLUserdevClientLaunchProvider.lambda$launchService$0(FMLUserdevClientLaunchProvider.java:55) ~[forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-recomp.jar:?] at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-3.2.0.jar:?] at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:50) [modlauncher-3.2.0.jar:?] at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:68) [modlauncher-3.2.0.jar:?] at cpw.mods.modlauncher.Launcher.run(Launcher.java:80) [modlauncher-3.2.0.jar:?] at cpw.mods.modlauncher.Launcher.main(Launcher.java:65) [modlauncher-3.2.0.jar:?] at net.minecraftforge.userdev.LaunchTesting.main(LaunchTesting.java:101) [forge-1.14.4-28.1.0_mapped_snapshot_20190719-1.14.3-recomp.jar:?] [16Feb2020 10:26:55.621] [Client thread/INFO] [com.mojang.text2speech.NarratorWindows/]: Narrator library for x64 successfully loaded [16Feb2020 10:26:58.384] [Thread-1/FATAL] [net.minecraftforge.common.ForgeConfig/CORE]: Forge config just got changed on the file system! [16Feb2020 10:26:58.386] [Server-Worker-4/ERROR] [net.minecraftforge.fml.ModLoader/LOADING]: Skipping lifecycle event SETUP, 1 errors found. [16Feb2020 10:26:58.387] [Server-Worker-4/FATAL] [net.minecraftforge.fml.ModLoader/LOADING]: Failed to complete lifecycle event SETUP, 1 errors found [16Feb2020 10:26:58.387] [Server-Worker-4/FATAL] [net.minecraftforge.eventbus.EventBus/EVENTBUS]: EventBus 0 shutting down - future events will not be posted. java.lang.Exception: stacktrace at net.minecraftforge.eventbus.EventBus.shutdown(EventBus.java:278) ~[eventbus-1.0.0-service.jar:?] at net.minecraftforge.fml.client.ClientModLoader.lambda$createRunnableWithCatch$5(ClientModLoader.java:97) ~[?:?] at net.minecraftforge.fml.client.ClientModLoader.startModLoading(ClientModLoader.java:105) ~[?:?] at net.minecraftforge.fml.client.ClientModLoader.lambda$onreload$3(ClientModLoader.java:87) ~[?:?] at net.minecraftforge.fml.client.ClientModLoader.lambda$createRunnableWithCatch$5(ClientModLoader.java:95) ~[?:?] at java.util.concurrent.CompletableFuture$AsyncRun.run(Unknown Source) [?:1.8.0_161] at java.util.concurrent.CompletableFuture$AsyncRun.exec(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinTask.doExec(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source) [?:1.8.0_161] [16Feb2020 10:27:07.462] [Realms Notification Availability checker #1/INFO] [com.mojang.realmsclient.client.RealmsClient/]: Could not authorize you against Realms server: Invalid session id [16Feb2020 10:27:27.487] [Server-Worker-4/ERROR] [net.minecraftforge.fml.ModLoader/LOADING]: Skipping lifecycle event ENQUEUE_IMC, 1 errors found. [16Feb2020 10:27:27.488] [Server-Worker-4/FATAL] [net.minecraftforge.fml.ModLoader/LOADING]: Failed to complete lifecycle event ENQUEUE_IMC, 1 errors found [16Feb2020 10:27:27.488] [Server-Worker-4/FATAL] [net.minecraftforge.eventbus.EventBus/EVENTBUS]: EventBus 0 shutting down - future events will not be posted. java.lang.Exception: stacktrace at net.minecraftforge.eventbus.EventBus.shutdown(EventBus.java:278) ~[eventbus-1.0.0-service.jar:?] at net.minecraftforge.fml.client.ClientModLoader.lambda$createRunnableWithCatch$5(ClientModLoader.java:97) ~[?:?] at net.minecraftforge.fml.client.ClientModLoader.finishModLoading(ClientModLoader.java:118) ~[?:?] at net.minecraftforge.fml.client.ClientModLoader.lambda$onreload$4(ClientModLoader.java:89) ~[?:?] at java.util.concurrent.CompletableFuture.uniRun(Unknown Source) [?:1.8.0_161] at java.util.concurrent.CompletableFuture$UniRun.tryFire(Unknown Source) [?:1.8.0_161] at java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinTask.doExec(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source) [?:1.8.0_161] at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source) [?:1.8.0_161] [16Feb2020 10:27:27.533] [Client thread/WARN] [net.minecraft.client.GameSettings/]: Skipping bad option: lastServer: [16Feb2020 10:27:29.123] [Client thread/INFO] [net.minecraft.client.audio.SoundSystem/]: OpenAL initialized. [16Feb2020 10:27:29.162] [Client thread/INFO] [net.minecraft.client.audio.SoundEngine/SOUNDS]: Sound engine started [16Feb2020 10:27:30.550] [Client thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 512x512 textures-atlas [16Feb2020 10:27:34.989] [Client thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 256x256 textures/particle-atlas [16Feb2020 10:27:35.013] [Client thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 256x256 textures/painting-atlas [16Feb2020 10:27:35.020] [Client thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 128x128 textures/mob_effect-atlas
  18. Hello, I'm working on a capability that allows the player to train rpg-like skills, but I have come across a problem that I can't see the cause of. Relevant part of the crash report: java.lang.NullPointerException: null at net.minecraftforge.common.capabilities.CapabilityManager.register(CapabilityManager.java:79) ~[?:?] at com.lk1905.gielinorcraft.capability.skill.CapabilitySkills.register(CapabilitySkills.java:26) ~[?:?] at com.lk1905.gielinorcraft.Gielinorcraft.<init>(Gielinorcraft.java:21) ~[?:?] The error is on the CapabilityManager.INSTANCE.register line in the CapabilitySkills class. CapabilitySkills.java package com.lk1905.gielinorcraft.capability.skill; import com.lk1905.gielinorcraft.api.capability.ISkillContainer; import com.lk1905.gielinorcraft.api.utils.CapabilityUtils; import com.lk1905.gielinorcraft.capability.CommonCapabilityProvider; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.CapabilityInject; import net.minecraftforge.common.capabilities.CapabilityManager; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @Mod.EventBusSubscriber public class CapabilitySkills { @CapabilityInject(ISkillContainer.class) private static Capability<ISkillContainer> skillContainerCapability; public static void register() { CapabilityManager.INSTANCE.register(ISkillContainer.class, new SkillStorage(), () -> new SkillContainer());//<---THIS LINE } @SubscribeEvent public static void attachCapability(AttachCapabilitiesEvent<Entity> e) { if(!(e.getObject() instanceof PlayerEntity)) { return; } SkillContainer newContainer = new SkillContainer(); e.addCapability(newContainer.getCapabilityID(), new CommonCapabilityProvider<>(skillContainerCapability, null, newContainer)); } @SubscribeEvent public static void onPlayerClone(final PlayerEvent.Clone e) { ISkillContainer oldCapability = (ISkillContainer) CapabilityUtils.getCapability(e.getOriginal(), null); ISkillContainer newCapability = (ISkillContainer) CapabilityUtils.getCapability(e.getPlayer(), null); newCapability.setAllSkills(oldCapability.getAllSkills()); } public static ISkillContainer getSkillContainer(ICapabilityProvider provider) { return (ISkillContainer) CapabilityUtils.getCapability(provider, skillContainerCapability); } public static Capability<ISkillContainer> getSkillCapability(){ return skillContainerCapability; } } My main class: Gielinorcraft.java package com.lk1905.gielinorcraft; import org.apache.logging.log4j.Logger; import com.lk1905.gielinorcraft.capability.skill.CapabilitySkills; import com.lk1905.gielinorcraft.capability.skill.SkillContainer; import com.lk1905.gielinorcraft.skills.AttackSkill; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Mod; @Mod(Gielinorcraft.MODID) public class Gielinorcraft { public static Logger logger; public static final String MODID = "gielinorcraft"; public Gielinorcraft() { CapabilitySkills.register(); SkillContainer.registerNewSkill(AttackSkill.class); MinecraftForge.EVENT_BUS.register(AttackSkill.class); } } SkillStorage.java package com.lk1905.gielinorcraft.capability.skill; import java.util.Map; import com.lk1905.gielinorcraft.api.capability.ISkillContainer; import com.lk1905.gielinorcraft.api.skills.ISkill; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.INBT; import net.minecraft.util.Direction; import net.minecraftforge.common.capabilities.Capability; public class SkillStorage implements Capability.IStorage<ISkillContainer>{ public SkillStorage() { } @Override public CompoundNBT writeNBT(Capability<ISkillContainer> capability, ISkillContainer instance, Direction side) { CompoundNBT skillData = new CompoundNBT(); for(Map.Entry<String, ISkill> entry : instance.getAllSkills().entrySet()) { skillData.put(entry.getKey(), entry.getValue().serializeNBT()); } return skillData; } @Override public void readNBT(Capability<ISkillContainer> capability, ISkillContainer instance, Direction side, INBT nbt) { CompoundNBT skillData = (CompoundNBT) nbt; for(String key : skillData.keySet()) { instance.getSkill(key).deserializeNBT(skillData.getCompound(key)); } } } SkillContainer.java package com.lk1905.gielinorcraft.capability.skill; import java.nio.charset.Charset; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import com.lk1905.gielinorcraft.Gielinorcraft; import com.lk1905.gielinorcraft.api.capability.ISkillContainer; import com.lk1905.gielinorcraft.api.skills.ISkill; import io.netty.buffer.ByteBuf; import net.minecraft.util.ResourceLocation; public class SkillContainer implements ISkillContainer{ private final static Set<Class<? extends ISkill>> skillClasses = new HashSet<>(); private final Map<String, ISkill> skills; public SkillContainer() { skills = new HashMap<>(); for(Class<? extends ISkill> skillClass : skillClasses) { ISkill skill; try { skill = skillClass.newInstance(); }catch(InstantiationException | IllegalAccessException e) { Gielinorcraft.logger.error("Failed to initialise skill instance from class descriptor: " + skillClass.getName()); continue; } skills.put(skill.getName(), skill); } } @Override public ISkill getSkill(String name) { return this.skills.get(name); } @Override public void setAllSkills(Map<String, ISkill> newSkills) { this.skills.putAll(newSkills); } @Override public void serializePacket(ByteBuf buf) { buf.writeInt(skills.size()); for(ISkill skill : skills.values()) { buf.writeInt(skill.getName().length()); buf.writeCharSequence(skill.getName(), Charset.defaultCharset()); skill.serializePacket(buf); } } @Override public void deserializePacket(ByteBuf buf) { int numberOfSkills = buf.readInt(); for(int i = 0; i < numberOfSkills; i++) { int lengthOfSkillName = buf.readInt(); String skillName = buf.readCharSequence(lengthOfSkillName, Charset.defaultCharset()).toString(); getSkill(skillName).deserializePacket(buf); } } @Override public ResourceLocation getCapabilityID() { return new ResourceLocation(Gielinorcraft.MODID, "skills"); } @Override public Map<String, ISkill> getAllSkills(){ return skills; } @Override public Map<String, Double> getAllSkillXP(){ Map<String, Double> skillXP = new HashMap<>(); for(Map.Entry<String, ISkill> entry : skills.entrySet()) { skillXP.put(entry.getKey(), entry.getValue().getXP()); } return skillXP; } public static void registerNewSkill(Class<? extends ISkill> skillClass) { skillClasses.add(skillClass); } } I think thats all the relevant classes, If you need to see others let me know. I'm guessing the problem is with either the SkillContainer or SkillStorage class, but I Can't see what. Thanks
  19. I've been having a problem testing my mod, where it freezes when it attempts to load terrain. Crash report: The report suggests there is a problem at line 27 in my OreGen.java class, which is this class (Line 27 is under Case 0): I can't actually see any problems with any of the code in this class, so the only thing I can think of is I've initialized/registered something wrong, although I can't see anything wrong in any of those classes either, but I'll post the classes I think are relevant under here anyway. My Main class: My CommonProxy class: My ClientProxy class: And my ModBlocks class: Does anyone know what the problem is, or what I've done wrong?

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.