Bonjour, je met en ligne ce post car j’essaye de faire un système de first join au serveur avec mon mod. Le soucis est que quand je j’arrive pas à me connecter au serveur, ça me dit internal serveur error : at net.sultan.tonation.capabilities.EventHandler.onPlayerLoggedIn(EventHandler.java:42) ~[EventHandler.class:?]
Je pense que sinon, avec le code que j’ai, la capability first_join devrait-être persistante au démarrage du serveur.
class first join
package net.sultan.tonation.capabilities.capabilities;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.sultan.tonation.capabilities.tonation;
public class FirstJoin implements IFirstJoin{
public int first_join;
public FirstJoin()
{
}
public FirstJoin(int i)
{
this.first_join = i;
}
@Override
public void setFirstJoin()
{
this.first_join = 0;
}
@Override
public int isFirstConnection()
{
return this.first_join;
}
@Override
public void sync(EntityPlayer player) //sync data between player and server
{
FirstJoinPacket packet = new FirstJoinPacket(first_join);
if(!player.world.isRemote)
{
System.out.println("sync, isRemote ? : no, send to player");
EntityPlayerMP playerMP = (EntityPlayerMP)player;
tonation.network.sendTo(packet, playerMP);
}
else
{
System.out.println("sync, isRemote ? : yes, send to server");
tonation.network.sendToServer(packet);
}
}
}
class firstjoinpack
package net.sultan.tonation.capabilities.capabilities;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class FirstJoinPacket implements IMessage {
public int first_join;
public FirstJoinPacket(int fj)
{
this.first_join = fj;
}
public FirstJoinPacket()
{
}
@Override
public void fromBytes(ByteBuf buf) {
first_join = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(first_join);
}
public static class ServerHandler implements IMessageHandler<FirstJoinPacket, IMessage> {
@Override
public IMessage onMessage(FirstJoinPacket message, MessageContext ctx)
{
System.out.println("Packet recu serveur, firstjoin = " + message.first_join);
ctx.getServerHandler().player.getServerWorld().addScheduledTask(new ScheduledPacketTask(ctx.getServerHandler().player, message));
return null;
}
}
@SideOnly(Side.CLIENT)
public static class ClientHandler implements IMessageHandler <FirstJoinPacket, IMessage>{
@Override
public IMessage onMessage(FirstJoinPacket message, MessageContext ctx)
{
System.out.println("Packet recu client, firstjoin = " + message.first_join);
Minecraft.getMinecraft().addScheduledTask(new ScheduledPacketTask(null, message));
return null;
}
}
}
class firstjoinprovider
package net.sultan.tonation.capabilities.capabilities;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.common.util.INBTSerializable;
import net.sultan.tonation.capabilities.tonation;
public class FirstJoinProvider implements ICapabilityProvider, INBTSerializable<NBTTagCompound>
{
protected IFirstJoin firstJoin;
protected EntityPlayer player;
@Override
public NBTTagCompound serializeNBT() {
return (NBTTagCompound) tonation.FIRST_JOIN_CAP.writeNBT(this.firstJoin, null);
}
@Override
public void deserializeNBT(NBTTagCompound nbt) {
tonation.FIRST_JOIN_CAP.readNBT(this.firstJoin, null, nbt);
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing)
{
return tonation.FIRST_JOIN_CAP != null && capability == tonation.FIRST_JOIN_CAP;
}
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
return this.hasCapability(capability, facing) ? tonation.FIRST_JOIN_CAP.cast(this.firstJoin) : null;
}
public static void register()
{
CapabilityManager.INSTANCE.register(IFirstJoin.class, new FirstJoinStorage(), FirstJoin::new);
}
public FirstJoinProvider(EntityPlayer player)
{
this.firstJoin = new FirstJoin(1);
this.player = player;
}
public IFirstJoin getFirstJoinObj()
{
return firstJoin;
}
}
class firstjoinstorage
package net.sultan.tonation.capabilities.capabilities;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.Capability.IStorage;
public class FirstJoinStorage implements IStorage<IFirstJoin> {
@Override
public NBTBase writeNBT(Capability<IFirstJoin> capability, IFirstJoin instance, EnumFacing side)
{
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("first_join", instance.isFirstConnection());
return nbt;
}
@Override
public void readNBT(Capability<IFirstJoin> capability, IFirstJoin instance, EnumFacing side, NBTBase base)
{
if(base instanceof NBTTagCompound) {
NBTTagCompound nbt = (NBTTagCompound)base;
instance.setFirstJoin();
}
}
}
class ifirstjoin
package net.sultan.tonation.capabilities.capabilities;
import net.minecraft.entity.player.EntityPlayer;
public interface IFirstJoin {
public void setFirstJoin();
public int isFirstConnection();
public void sync(EntityPlayer player);
}
class scheduledpackettask
package net.sultan.tonation.capabilities.capabilities;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.sultan.tonation.capabilities.tonation;
public class ScheduledPacketTask implements Runnable
{
private EntityPlayer player;
private FirstJoinPacket message;
public ScheduledPacketTask(EntityPlayer player, FirstJoinPacket message)
{
this.player = player;
this.message = message;
}
@Override
public void run()
{
EntityPlayer player = this.player == null ? getPlayer() : this.player;
player.getCapability(tonation.FIRST_JOIN_CAP, null).setFirstJoin();
}
@SideOnly(Side.CLIENT)
private EntityPlayer getPlayer()
{
return Minecraft.getMinecraft().player;
}
}
class eventhandler (gestion des évènements)
package net.sultan.tonation.capabilities;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.TextComponentString;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent;
import net.sultan.tonation.capabilities.capabilities.FirstJoinProvider;
import net.sultan.tonation.capabilities.capabilities.IFirstJoin;
@Mod.EventBusSubscriber
public class EventHandler {
public static final ResourceLocation FIRST_JOIN_CAP = new ResourceLocation(tonation.MODID, "first_join");
@SubscribeEvent
public void attachCapability(AttachCapabilitiesEvent<Entity> event)
{
Entity entity = event.getObject();
if(!(entity instanceof EntityPlayer));
event.addCapability(FIRST_JOIN_CAP, new FirstJoinProvider((EntityPlayer)entity));
}
@SubscribeEvent
public static void onPlayerRespawn(PlayerEvent.PlayerRespawnEvent event)
{
if(!event.player.world.isRemote)
{
event.player.getCapability(tonation.FIRST_JOIN_CAP, null).sync(event.player);
}
}
@SubscribeEvent
public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event)
{
EntityPlayer player = event.player;
IFirstJoin fj = player.getCapability(tonation.FIRST_JOIN_CAP, null);
fj.sync(player);
if(fj.isFirstConnection() == 1){
String message = String.format("Here is your first connection!", (int) fj.isFirstConnection());
player.sendMessage(new TextComponentString(message));
}
else{
player.sendMessage(new TextComponentString("Hello back bud!"));
}
player.getCapability(tonation.FIRST_JOIN_CAP, null).setFirstJoin();
}
}
class tonation (classe principale)
package net.sultan.tonation.capabilities;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import net.minecraftforge.fml.relauncher.Side;
import net.sultan.tonation.capabilities.capabilities.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Mod(modid = tonation.MODID, name = tonation.NAME, version = tonation.VERSION)
public class tonation
{
@CapabilityInject(IFirstJoin.class)
public static final Capability<IFirstJoin> FIRST_JOIN_CAP = null;
public static final String MODID = "tonation";
public static final String NAME = "TonationMod";
public static final String VERSION = "1.0";
public static Logger LOGGER = LogManager.getLogger();
public static SimpleNetworkWrapper network;
/*@SidedProxy(clientSide = "net.sultan.tonation.capabilities.CommonProxy", serverSide = "net.sultan.tonation.capabilities.CommonProxy")
public static CommonProxy proxy;*/
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
//Register network max range 255
network = NetworkRegistry.INSTANCE.newSimpleChannel("tonation");
//Server processing
network.registerMessage(FirstJoinPacket.ServerHandler.class, FirstJoinPacket.class, 1, Side.SERVER);
if(event.getSide() != Side.SERVER)
{
//Client processing
network.registerMessage(FirstJoinPacket.ClientHandler.class, FirstJoinPacket.class, 0, Side.CLIENT);
}
LOGGER = event.getModLog();
}
@EventHandler
public void init(FMLInitializationEvent event)
{
//proxy.init();
FirstJoinProvider.register();
LOGGER.info("LOGGER NAME : ", LOGGER.getName());
}
}
Merci d’avance pour votre aide, je suis sûr qu’il y a quelque-chose qui m’a échappé et qu’il s’agit de trois fois rien.