I have just started with trying to make a simple minecraft mod that returns the PlayerEntity DisplayName property and logs it to the console. The Code goes as follows:
SimpleMod.java
package net.arecdev.simplemod;
import net.fabricmc.api.ModInitializer;
import net.arecdev.simplemod.test.TestClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SimpleMod implements ModInitializer {
public static final String MOD_ID = "simplemod";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
@Override
public void onInitialize() {
LOGGER.info("Simple Mod has started");
String teststring = TestClass.test();
LOGGER.info("String: " + teststring);
}
}
TestClass.java
package net.arecdev.simplemod.test;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.text.Text;
public class TestClass {
public static String test() {
PlayerEntity player = MinecraftClient.getInstance().player;
Text playerDisplayName = player.getDisplayName();
String playerDisplayString = playerDisplayName.getString();
return playerDisplayString;
}
}
when trying to run this with a Minecraft Client I get a NullPointerException:
Caused by: java.lang.NullPointerException: Cannot invoke "net.minecraft.entity.player.PlayerEntity.getDisplayName()" because "player" is null
I assume this happens because the MinecraftClient hasn't started at that point yet. So how do I wait till MinecraftClient has been initialized.
Have you checked the player is in a world? To get the Player entity the world needs to be loaded I believe. If the world or level is null the PlayerEntity should be null since there is no PlayerEntity that exists since there is no world.
If you intent to get the username when the client first starts you should try to get the current account information received from the servers. I hope this helps!