Système de gravité inversé
-
je vois ce que tu veux dire mais je n’y arrive pas peut tu me montrer l’exemple avec la première par exemple ? se serait ggénial merci ^^
-
Je te montre ça demain ou ce soir
Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk
-
pas de probleme ^^
-
j’ai essayer encore mais je n’y arrive toujours pas ^^ je vois pas comment faire mais je comprends le principe sa m’aiderai beaucoup si au moins un objet été coder que je comprene le truc pour en faire d’autre apres
-
Alors dans la fonction onItemRigthClick (que tu peux obtenir en faisant ctrl+espace dans la classe de ton item puis en tapant son nom car je ne connais pas ses arguments en 1.7.10) :
NBTTagCompound tag = stack.getTagCompound(); if(tag == null) { tag = new NBTTagCompound(); stack.setTagCompoundTag(tag); } int duration = tag.getInteger("FlyCounter"); if(duration <= 0) { tag.setInteger("FlyCounter", laDureeEnTicksDeTonEffet); //Tu enregistres la durée de ton effet pour pouvoir la conserver }Puis dans ta classe d’event (à créer si tu n’en a pas), tu fais l’event [size=smallPlayerTickEvent] qui sera appelé dès qu’un joueur est update :
@SubscribeEvent public void onPlayerUpdate([size=smallPlayerTickEvent event)] { if(!event.player/*player ou getPlayer() ou entity ou getEntity*/.getWorld().isRemote)//Si on est sur le serveur { ItemStack stack = event.player/*player ou getPlayer() ou entity ou getEntity*/.getHeldItem(); if(stack != null)//Si le joueur tient quelque chose { if(stack.getItem() == tonItemPourFly) { NBTTagCompound tag = stack.getTagCompound(); if(tag != null) { int flyDuration = tag.getInteger("FlyCounter"); if(flyDuration > 0) //Si l'effet est en cours { event.player/*player ou getPlayer() ou entity ou getEntity*/.motionY += laHauteurQueTuSouhaites; tag.setInteger("FlyCounter", flyDuration–); //Tu diminues le compteur } } } } } }Puis enfin tu enregistres ta classe d’event pour que les events qui sont dedans soient appelés par Forge :
[size=x-smallFMLCommonHandler.bus().register(new TaClassD'event();] ``` à mettre dans ta classe principale dans la fonction init par exemple. Si il y a une erreur ou quelque chose que tu ne comprend pas quelque part, hésite pas :) Petite précision, après avoir écrit tout ça, je me dis que par contre il faut que le joueur continue à tenir l'item pour voler, si ça te gène dis-le, je regarderais pour enregistrer la durée de vol autre part que dans les tags de l'item. -
je n’ai pas d’erreur mais ne marche pas en jeu j’ai du me tromper quelque part ^^
:::
package fr.amelya.modelia.common; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import fr.amelya.modelia.common.blocs.EliaOre; import fr.amelya.modelia.common.items.EliaIngot; import fr.amelya.modelia.proxy.CommonProxy; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.item.Item; import net.minecraftforge.common.MinecraftForge; @Mod(modid = "modelia", name = "Elia", version = "1.0.0") public class Modelia { @Instance("modelia") public static Modelia instance; public static final String MODID = "modelia"; @SidedProxy(clientSide = "fr.amelya.modelia.proxy.ClientProxy", serverSide = "fr.amelya.modelia.proxy.CommonProxy") public static CommonProxy proxy; public static Item EliaIngot; public static Block EliaOre; @EventHandler public void preInit(FMLPreInitializationEvent event) { EliaIngot = new EliaIngot().setUnlocalizedName("eliaingot").setTextureName(Modelia.MODID + ":elia_ingot"); EliaOre = new EliaOre(Material.rock).setBlockName("eliaore").setBlockTextureName(Modelia.MODID + ":elia_ore"); GameRegistry.registerItem(EliaIngot, "elia_ingot"); GameRegistry.registerBlock(EliaOre, "elia_ore"); FMLCommonHandler.instance().bus().register(new PlayerEventHandler()); MinecraftForge.EVENT_BUS.register(new PlayerEventHandler()); } @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRender(); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } }:::
:::
package fr.amelya.modelia.common; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; public class PlayerEventHandler { @SubscribeEvent public void onPlayerUpdate(PlayerTickEvent event) { if(!event.player/* player ou getPlayer() ou entity ou getEntity */.getEntityWorld().isRemote)// Si on est sur le serveur { ItemStack stack = event.player/* player ou getPlayer() ou entity ou getEntity */.getHeldItem(); if(stack != null)// Si le joueur tient quelque chose { if(stack.getItem() == Modelia.EliaIngot) { NBTTagCompound tag = stack.getTagCompound(); if(tag != null) { int flyDuration = tag.getInteger("FlyCounter"); if(flyDuration > 0) // Si l'effet est en cours { event.player/* player ou getPlayer() ou entity ou getEntity */.motionY += 10; tag.setInteger("FlyCounter", flyDuration–); // Tu diminues le compteur } } } } } } }:::
:::
package fr.amelya.modelia.common.items; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; public class EliaIngot extends Item { public EliaIngot() { this.setCreativeTab(CreativeTabs.tabMaterials); } public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { NBTTagCompound tag = stack.getTagCompound(); if(tag == null) { tag = new NBTTagCompound(); stack.setTagCompound(tag); } int duration = tag.getInteger("FlyCounter"); if(duration <= 0) { tag.setInteger("FlyCounter", 100); // Tu enregistres la durée de ton effet pour pouvoir la conserver } return stack; } }:::
j’ai mis sa sur un lingot en attendant la fleme de crer lobjet pour l’instant je le ferai quand sa marchera
merci de ton aide pour trouver l’erreur
-
je n’ai pas d’erreur mais ne marche pas en jeu j’ai du me tromper quelque part ^^
:::
package fr.amelya.modelia.common; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import fr.amelya.modelia.common.blocs.EliaOre; import fr.amelya.modelia.common.items.EliaIngot; import fr.amelya.modelia.proxy.CommonProxy; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.item.Item; import net.minecraftforge.common.MinecraftForge; @Mod(modid = "modelia", name = "Elia", version = "1.0.0") public class Modelia { @Instance("modelia") public static Modelia instance; public static final String MODID = "modelia"; @SidedProxy(clientSide = "fr.amelya.modelia.proxy.ClientProxy", serverSide = "fr.amelya.modelia.proxy.CommonProxy") public static CommonProxy proxy; public static Item EliaIngot; public static Block EliaOre; @EventHandler public void preInit(FMLPreInitializationEvent event) { EliaIngot = new EliaIngot().setUnlocalizedName("eliaingot").setTextureName(Modelia.MODID + ":elia_ingot"); EliaOre = new EliaOre(Material.rock).setBlockName("eliaore").setBlockTextureName(Modelia.MODID + ":elia_ore"); GameRegistry.registerItem(EliaIngot, "elia_ingot"); GameRegistry.registerBlock(EliaOre, "elia_ore"); FMLCommonHandler.instance().bus().register(new PlayerEventHandler()); MinecraftForge.EVENT_BUS.register(new PlayerEventHandler()); } @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRender(); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } }:::
:::
package fr.amelya.modelia.common; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; public class PlayerEventHandler { @SubscribeEvent public void onPlayerUpdate(PlayerTickEvent event) { if(!event.player/* player ou getPlayer() ou entity ou getEntity */.getEntityWorld().isRemote)// Si on est sur le serveur { ItemStack stack = event.player/* player ou getPlayer() ou entity ou getEntity */.getHeldItem(); if(stack != null)// Si le joueur tient quelque chose { if(stack.getItem() == Modelia.EliaIngot) { NBTTagCompound tag = stack.getTagCompound(); if(tag != null) { int flyDuration = tag.getInteger("FlyCounter"); if(flyDuration > 0) // Si l'effet est en cours { event.player/* player ou getPlayer() ou entity ou getEntity */.motionY += 10; tag.setInteger("FlyCounter", flyDuration–); // Tu diminues le compteur } } } } } } }:::
:::
package fr.amelya.modelia.common.items; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; public class EliaIngot extends Item { public EliaIngot() { this.setCreativeTab(CreativeTabs.tabMaterials); } public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { NBTTagCompound tag = stack.getTagCompound(); if(tag == null) { tag = new NBTTagCompound(); stack.setTagCompound(tag); } int duration = tag.getInteger("FlyCounter"); if(duration <= 0) { tag.setInteger("FlyCounter", 100); // Tu enregistres la durée de ton effet pour pouvoir la conserver } return stack; } }:::
j’ai mis sa sur un lingot en attendant la fleme de crer lobjet pour l’instant je le ferai quand sa marchera
merci de ton aide pour trouver l’erreur
-
Alors il va falloir mettre des System.out.println un peu partout dans ta fonction onPlayerUpdate pour voir où ça bloque (appelé 20fois par secondes donc t’aura une console bien remplie).
Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk
-
apeler 20 fois par seconde ? et mettre sa dans la classe objet ou event ?
-
La classe objet ? C’est quoi ?
Met le dans l’event pour voir si tout ton code est appelé
-
c’est l’item qui sert a faire voller ici un lingot (pour le test) et merci je testerai sa