• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Erreur "NoClassDefFoundError: Could not initialize" avec les capability

    Support pour les moddeurs
    1.19.x
    1
    2
    35
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • G
      Gromlir dernière édition par robin4002

      Bonjour à tous,

      Je suis actuellement en train de me former au modding minecraft. Je suis actuellement en train d’essayer de mettre en place les capability en 1.19.2. Je me suis aidé de différentes sources dont le tuto présent ici. Mais j’ai combler les parties dépréciées avec des infos glané ici et là sur internet et je pense qu’à la fin j’ai fait n’importe quoi 😐 . Puisque j’ai un magnifique crash du serveur avec l’erreur suivante :

      java.lang.NoClassDefFoundError: Could not initialize class com.modtutorial.capability.MyCapabilityProvider
      

      Voici un peu les fragments de code que j’imagine être coupable, je pense que ça doit être une erreur bien stupide mais je la vois pas 😅 .

      @Mod(ModTutorial.MOD_ID)
      public class ModTutorial {
      	       // la constante avec l'identifiant du mod
      		   public static final String MOD_ID = "modtutorial";
      		   // le logger du mod
      	   public static final Logger LOGGER = LogManager.getLogger(MOD_ID);
      	   
      		   // constructeur de la classe principale, on enregistre ici nos events
      	   public ModTutorial() {
      		   FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
      		   FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientSetup);
      		   FMLJavaModLoadingContext.get().getModEventBus().addListener(this::serverSetup);
      		   MinecraftForge.EVENT_BUS.addListener(EventPriority.HIGH,this::onExplosion);
      		   MinecraftForge.EVENT_BUS.register(MyCapabilityAttacher.class);
      
      		   IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
      [...]
      
      public class MyCapabilityAttacher {
      
          @SubscribeEvent
          public static void attach(final AttachCapabilitiesEvent<Entity> event) {
              final MyCapabilityProvider provider = new MyCapabilityProvider();
              
              event.addCapability(MyCapabilityProvider.IDENTIFIER, provider);
              System.out.println("attach capability");
          }
      
          private MyCapabilityAttacher() {
          }
      }
      
      public class MyCapabilityProvider implements ICapabilityProvider, INBTSerializable<CompoundTag> {
      
          public static final ResourceLocation IDENTIFIER = new ResourceLocation(ModTutorial.MOD_ID, "myCap");
      
          private final MyCapabilityInterface backend = new MyCapabilityImplementation();
          private final LazyOptional<MyCapabilityInterface> optionalData = LazyOptional.of(() -> backend);
      
          @NotNull
          @Override
          public <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, @Nullable Direction side) {
              return MyCapability.INSTANCE.orEmpty(cap, this.optionalData);
          }
      
          void invalidate() {
              this.optionalData.invalidate();
          }
      
          @Override
          public CompoundTag serializeNBT() {
              return this.backend.serializeNBT();
          }
      
          @Override
          public void deserializeNBT(CompoundTag nbt) {
              this.backend.deserializeNBT(nbt);
          }
      }
      

      En espérant que ça suffise,

      Merci d’avance

      1 réponse Dernière réponse Répondre Citer 0
      • G
        Gromlir dernière édition par

        J’ai trouvé !

        public static final ResourceLocation IDENTIFIER = new ResourceLocation(ModTutorial.MOD_ID, "myCap");
        

        La ressourceLocation n’accepte pas les majuscules. Par contre, j’ai dû initialiser l’objet à la racine pour avoir un message potable :

        Exception message: net.minecraft.ResourceLocationException: Non [a-z0-9/._-] character in path of location: modtutorial:myCap
        

        J’ai une erreur de conf ou un truc du genre ? Ca m’aurait plu d’avoir le message d’erreur directement.

        1 réponse Dernière réponse Répondre Citer 1
        • G
          Gromlir dernière édition par

          J’ai trouvé !

          public static final ResourceLocation IDENTIFIER = new ResourceLocation(ModTutorial.MOD_ID, "myCap");
          

          La ressourceLocation n’accepte pas les majuscules. Par contre, j’ai dû initialiser l’objet à la racine pour avoir un message potable :

          Exception message: net.minecraft.ResourceLocationException: Non [a-z0-9/._-] character in path of location: modtutorial:myCap
          

          J’ai une erreur de conf ou un truc du genre ? Ca m’aurait plu d’avoir le message d’erreur directement.

          1 réponse Dernière réponse Répondre Citer 1
          • Cette question est désormais résolue  G Gromlir 
          • Cette question n'est désormais plus résolue  robin4002 robin4002 
          • Cette question est désormais résolue  robin4002 robin4002 
          • 1 / 1
          • Premier message
            Dernier message
          Design by Woryk
          Contact / Mentions Légales

          MINECRAFT FORGE FRANCE © 2018

          Powered by NodeBB