Résolu RenderingRegistry
-
Bonjour,
Ca va faire une heure est demi que je cherche mais je n’arrive pas à enregistrer le render de mon entité,
Renders :@OnlyIn(Dist.CLIENT) public class Renders { public static void registerRenders() { RenderingRegistry.registerEntityRenderingHandler(Entities.ROBOT, manager -> new RenderRobot(manager) /* c'est ici que ça me mets une erreur */); } }
et RenderRobot :
@OnlyIn(Dist.CLIENT) public class RenderRobot extends LivingRenderer<EntityRobot, ModelRobot> { public RenderRobot(EntityRendererManager manager) { super(manager, new ModelRobot(), 0); } @Override public ResourceLocation getEntityTexture(EntityRobot entity) { return new ResourceLocation(Main.MODID, "texture/entity/robot.png"); } }
EDIT : il demande un
IRenderFactory<Entity>
alors que moi je lui donne unIRenderFactory<EntityType<?>>
donc ça pose problème et je ne sais pas comment dire que c’estEntity
EDIT 2 : Il n’y pas de
RegistryEvent.Register
pour ça ? -
J’ai réglé le problème, j’ai créer une classe à part avec
onItemUse
puis dedans j’ai fait spawn le mob au bon endroit -
Ce message a été supprimé ! -
Essaye de faire RenderRobot::new.
-
J’avais essayé et ça n’avait pas marché
EDIT : en fait en 1.14 on pouvait extends de son entity donc moi
IRenderFactory<EntityRobot>
, mais depuis la 1.15 on est obligé deextends IRenderFactory<Entity>
et c’est ça qui pose problème. Or mon entity extends deLivingEntity
. Mais après tu pourrais me dire, tu fais une class à part et tu extends justeIRenderFactory
seul, et il n’y pas d’erreur, donc c’est cool, je lance mc et la boum, un petit, non mais vraiment tout petit (traduit en français car je ne me souviens pas de la phrase exact) :Le mod 'personal_robot' à eu un problème lors du sided_setup
donc moi je clique sur le bouton pour voir les logs et il y a un truc encore mois grave (enfin si un peu) :
NullPointerExeption
EDIT 2 : et à chaque je dis
IRenderFactory
mais en fait je suis pas sur avecIFactoryRenderer
-
À mon avis tu devrais faire une autre classe dans la RenderRobot qui implements IRenderFactory et passe la dans ta fonction.
-
C’est ce que j’ai fais au début sauf que pour que ça marche il faut mettre
IRenderFactory
sans les <> sauf que ça mets un npe -
Dans les crochets il faut mettre la classe de ton entité, c’est bizarre j’avais jamais rencontré un problème comme ça.
-
oui mas ça ne marche pas
-
J’ai trouvé mon problème, ça venait ne
Entities.ROBOT
qui était unEntityType<?>
et pasEntityType<EntityRobot>
-
Bonjour, j’ai un nouveau problème quand j’essaye d’utiliser mon oeuf de spawn,
voici la jolie erreur :[15:46:52] [Server thread/FATAL] [minecraft/ThreadTaskExecutor]: Error executing task on Server java.lang.NullPointerException: null at net.minecraft.item.SpawnEggItem.onItemUse(SpawnEggItem.java:80) ~[?:?] {re:classloading} at net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(ForgeHooks.java:610) ~[?:?] {re:classloading} at net.minecraft.item.ItemStack.onItemUse(ItemStack.java:173) ~[?:?] {re:classloading} at net.minecraft.server.management.PlayerInteractionManager.func_219441_a(PlayerInteractionManager.java:353) ~[?:?] {re:classloading} at net.minecraft.network.play.ServerPlayNetHandler.processTryUseItemOnBlock(ServerPlayNetHandler.java:881) ~[?:?] {re:classloading} at net.minecraft.network.play.client.CPlayerTryUseItemOnBlockPacket.processPacket(CPlayerTryUseItemOnBlockPacket.java:45) ~[?:?] {re:classloading} at net.minecraft.network.play.client.CPlayerTryUseItemOnBlockPacket.processPacket(CPlayerTryUseItemOnBlockPacket.java:12) ~[?:?] {re:classloading} at net.minecraft.network.PacketThreadUtil.lambda$checkThreadAndEnqueue$0(PacketThreadUtil.java:19) ~[?:?] {re:classloading} at net.minecraft.util.concurrent.TickDelayedTask.run(TickDelayedTask.java:20) ~[?:?] {re:classloading} at net.minecraft.util.concurrent.ThreadTaskExecutor.run(ThreadTaskExecutor.java:140) [?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.util.concurrent.RecursiveEventLoop.run(RecursiveEventLoop.java:22) [?:?] {re:classloading} at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:759) [?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:141) [?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.util.concurrent.ThreadTaskExecutor.driveOne(ThreadTaskExecutor.java:110) [?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.driveOneInternal(MinecraftServer.java:742) [?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.driveOne(MinecraftServer.java:736) [?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.util.concurrent.ThreadTaskExecutor.driveUntil(ThreadTaskExecutor.java:123) [?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.runScheduledTasks(MinecraftServer.java:722) [?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:666) [?:?] {re:classloading,pl:accesstransformer:B} at java.lang.Thread.run(Thread.java:748) [?:1.8.0_251] {}
et mon code :
@Mod.EventBusSubscriber(modid = Main.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) public class Items { public static Item PERSONAL_GEM; public static Item ROBOT_SPAWN_EGG; public static Item ELECTRICAL_FLUID_BUCKET; @SubscribeEvent public static void registerItems(RegistryEvent.Register<Item> event) { event.getRegistry().registerAll( PERSONAL_GEM = new ItemPersonalGem(), ROBOT_SPAWN_EGG = register("robot_spawn_egg", Entities.ROBOT, 0xFF0000, 0x00FFEE), ELECTRICAL_FLUID_BUCKET = register("electrical_fluid_bucket", Fluids.ELECTRICAL) ); } private static Item register(String name) { return new Item(new Item.Properties().group(Group.MOD)).setRegistryName(name); } private static Item register(String name, EntityType<?> entity, int primaryColor, int secondaryColor) { return new SpawnEggItem(entity, primaryColor, secondaryColor, new Item.Properties().group(Group.MOD).maxStackSize(1)).setRegistryName(name); } private static Item register(String name, Fluid fluid) { return new BucketItem(() -> fluid, new Item.Properties().group(Group.MOD).maxStackSize(1)).setRegistryName(name); } }
-
Tu pourrais montrer la classe de ton item avec steuplé ?
-
Mais non, j’utlise le 2eme register qui est dans la class même (ligne 27)
EDIT : je viens de me rendre compte que j’avais mis un maxStackSize, mais pourquoi ?
-
up ?
-
J’ai réglé le problème, j’ai créer une classe à part avec
onItemUse
puis dedans j’ai fait spawn le mob au bon endroit