Résolu Mon Mods ne Fonctione pas sur serveur
-
```Bonjours j'ai un soucie avec mon mods en 1.10.2 en client mon mods fonctionne très bien mais des que je veux tester en seveur ca met ce
Caused by: java.lang.NoClassDefFoundError: net/minecraftforge/client/model/ModelLoader
at ins.SandstoneBlock.registerRender(SandstoneBlock.java:141)
at ins.SandstoneBlock.registerRenders(SandstoneBlock.java:96)
at ins.SandstoneBlock.<init>(SandstoneBlock.java:26)
at com.mickdev.tuto.proxy.CommonProxy.preInit(CommonProxy.java:12)
at com.mickdev.tuto.proxy.ServerProxy.preInit(ServerProxy.java:6)
at com.mickdev.tuto.tutomods.Preinit(tutomods.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:618)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:243)
at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:221)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:145)
at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:624)
at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:99)
at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:328)
at net.minecraft.server.dedicated.DedicatedServer.startServer(DedicatedServer.java:124)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:497)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: net.minecraftforge.client.model.ModelLoader
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
… 38 more
Caused by: java.lang.NoClassDefFoundError: net/minecraft/client/renderer/block/model/ModelBakery
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:182)
… 40 more
Caused by: java.lang.ClassNotFoundException: net.minecraft.client.renderer.block.model.ModelBakery
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:101)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
… 44 moreA detailed walkthrough of the error, its code path and all known details is as follows:
– System Details –
Details:
Minecraft Version: 1.10.2
Operating System: Windows 7 (amd64) version 6.1
Java Version: 1.8.0_131, Oracle Corporation
Java VM Version: Java HotSpot 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 905813848 bytes (863 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB)
JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP 9.32 Powered by Forge 12.18.3.2297 7 mods loaded, 7 mods active
States: ‘U’ = Unloaded ‘L’ = Loaded ‘C’ = Constructed ‘H’ = Pre-initialized ‘I’ = Initialized ‘J’ = Post-initialized ‘A’ = Available ‘D’ = Disabled ‘E’ = Errored
UCH mcp{9.19} [Minecraft Coder Pack] (minecraft.jar)
UCH FML{8.0.99.99} [Forge Mod Loader] (forgeSrc-1.10.2-12.18.3.2297.jar)
UCH Forge{12.18.3.2297} [Minecraft Forge] (forgeSrc-1.10.2-12.18.3.2297.jar)
UCE tutomods{1.0} [WesterosBlocks] (bin)
UCH Waila{1.7.0} [Waila] (Waila-1.7.0-B3_1.9.4.jar)
UCH icse{1.1.0.0} _(Wawla-1.10.2-2.3.2.215.jar)
UCH wawla{2.3.2.215} [What Are We Looking At] (Wawla-1.10.2-2.3.2.215.jar)
Loaded coremods (and transformers):
Profiler Position: N/A (disabled)
Is Modded: Definitely; Server brand changed to ‘fml,forge’
Type: Dedicated Server (map_server.txt)voila ma class de mes block: [private void renders(){ registerBlock(orangeneon); } @SideOnly(Side.CLIENT) private void registerRenders(){ registerRender(orangeneon,0); } private void registerItemBlocks(){ registerItemBlock(orangeneon); } /**************************/ private void registerBlock(Block block){ GameRegistry.register(block); } private void registerRender(Block block,int meta){ ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block),meta,new ModelResourceLocation(new ResourceLocation(References.MODID,block.getUnlocalizedName().substring(5)),"inventory")); } private void registerItemBlock(Block block){ ItemBlock ib = new ItemBlock(block); ib.setRegistryName(block.getRegistryName()); GameRegistry.register(ib); et finalement comment je peux régler mon problème pour que mon mods fonctionne sur les deux client et server. merci de vôtre aide.:)_</init>
-
Alors, il y a plusieurs problèmes : La prochaine fois, mets des balises java pour ton code, ça sera plus clair et plus simple à lire.
Ensuite, il faut que tu revoies les noms de tes fonctions, leurs noms ne sont pas tous cohérents (celle render(…) notamment).Pour ton problème de crash, pourquoi as-tu mis une annotation “@SideOnly(Side.SERVER)” sur une fonction de rendu ? L’annotation pour le server n’est à utiliser que dans de très rares cas (elle ne fonctionne pas pour le serveur du mode solo). Il faut que tu mettes l’inverse pour ne plus avoir de crash, donc “@SideOnly(Side.CLIENT)” et que tu n’appelles cette fonction que si tu es sur le client (donc tu mets un if au dessus de l’appel de la fonction. Pour savoir si tu es sur le client tu peux faire ```java
if(FMLCommonHandler.instance().getSide().isClient()) -
Tu veux me dire que( private void renders(){ ) je doit mettre private void renders(Block block){ ou quoi alors je doit faire quoi aux juste.?
que tu veux dire par cohérents? -
Cohérent=logique.
Le premier paragraphe et le deuxième n’ont pas de lien. Pour le 1er paragraphe la fontion “render(Block)” enregistre le block et pas le rendu, donc elle devrait s’appeler “registerBlock(Block)”, le code serait plus facile à comprendre comme ça. -
private void renders(){
registerBlock(orangeneon);}
@SideOnly(Side.CLIENT)
private void registerRenders(){
registerRender(orangeneon,0);}
private void registerItemBlocks(){
registerItemBlock(orangeneon);}
/**************************/
private void registerBlock(Block block){
GameRegistry.register(block);
}
private void registerRender(Block block,int meta){
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block),meta,new ModelResourceLocation(new ResourceLocation(References.MODID,block.getUnlocalizedName().substring(5)),“inventory”));
}
private void registerItemBlock(Block block){
ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(block.getRegistryName());
GameRegistry.register(ib);–-------------
Mais maintenant il dit que sais le registerRender pk -
Tu as vérifier les proxys ?
-
package com.fury.tuto.proxy;
import init.ModBlocks;
import init.ModItem;public class CommonProxy {
public void preInit(){
new ModBlocks();
new ModItem();}
public void init(){}
}
–---------------------------------------------------------
public class ServerProxy extends CommonProxy{
@Override
public void preInit(){
super.preInit();}
@Override
public void init(){
super.init();
}}
Server et client son pareille -
“La prochaine fois, mets des balises java pour ton code, ça sera plus clair et plus simple à lire.”
Là sans aucune balise c’est très dur à lire, en plus la classe est pas en entière.
Mets la classe de tes blocks en entier dans une balise java ```java
code ici -
Ma class de mes block```java
package init;import com.fury.tuto.References;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;public class ModBlocks {
public ModBlocks(){
init();
renders();
registerItemBlocks();
registerRenders();
}public static Block orangeneon;
private void init(){
orangeneon = new Block(Material.IRON).setRegistryName(“orangeneon”).setUnlocalizedName(“orangeneon”).setHardness(2.0f).setResistance(1.5f).setCreativeTab(CreativeTabs.BUILDING_BLOCKS);}
private void renders(){
registerBlock(orangeneon);}
@SideOnly(Side.CLIENT)
private void registerRenders(){
registerMeta(orangeneon,0);}
private void registerItemBlocks(){
registerItemBlock(orangeneon);}
/**************************/
private void registerBlock(Block block){
GameRegistry.register(block);
}
private void registerMeta(Block block, int meta){
Item item = Item.getItemFromBlock(block);
ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(),“inventory”));
}
private void registerItemBlock(Block block){
ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(block.getRegistryName());
GameRegistry.register(ib);}
}
Ma classe CommmonProxy
java
package com.fury.tuto.proxy;import init.ModBlocks;
import init.ModItem;
import init.ModsBriks;
import init.SandBlock;
import init.SandstoneBlock;public class CommonProxy {
public void preInit(){
new ModBlocks();
new ModItem();}
public void init(){}
}
-
Alors les noms sont toujours pas logiques, “renders()”=>“registerBlocks()”, “registerMeta” => “registerRender” ce sera mieux ^^
Sinon pour ton crash tu n’as pas fait ce que je t’ai dit de faire :
@AymericRed:[…]et que tu n’appelles cette fonction que si tu es sur le client (donc tu mets un if au dessus de l’appel de la fonction. Pour savoir si tu es sur le client tu peux faire ```java
if(FMLCommonHandler.instance().getSide().isClient())(la fonction “registerRenders”)
-
comme ça ```java
public class ModBlocks {
public ModBlocks(){
init();
registerBlocks();
registerItemBlocks();
registerRenders();
}public static Block orangeneon;
private void init(){
orangeneon = new Block(Material.IRON).setRegistryName(“orangeneon”).setUnlocalizedName(“orangeneon”).setHardness(2.0f).setResistance(1.5f).setCreativeTab(CreativeTabs.BUILDING_BLOCKS);}
private void registerBlocks(){
registerBlock(orangeneon);}
@SideOnly(Side.CLIENT)
private void registerRenders(){
if(FMLCommonHandler.instance().getSide().isClient())
registerRender(orangeneon,0);}
private void registerItemBlocks(){
registerItemBlock(orangeneon);}
/**************************/
private void registerBlock(Block block){
GameRegistry.register(block);
}
private void registerRender(Block block, int meta){
Item item = Item.getItemFromBlock(block);
ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(),“inventory”));}
private void registerItemBlock(Block block){
ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(block.getRegistryName());
GameRegistry.register(ib);}
}
mais je sais pas ou mettre ce codes
java
if(FMLCommonHandler.instance().getSide().isClient()) -
Tu devrais lire ça https://openclassrooms.com/courses/apprenez-a-programmer-en-java c’est très intéressant.
Je t’ai dit de le mettre au dessus de l’appel de la fonction “registerRenders” donc comme ça :public ModBlocks(){ init(); registerBlocks(); registerItemBlocks(); if(FMLCommonHandler.instance().getSide().isClient()) registerRenders(); }
-
Merci ca fonctione.