Moddage item [1.7]



  • Bonjour, j'aimerai coder un item jetable et qui interagi avec le monde (particule et surtous poser des "block" de feux) mais je sais pas comment faire. Une idée ?



  • c'est a dire ? plus de details stp, et ensuite je veux bien de donner du code mais ce sera du code 1.12+ pas 1.7 🙂



  • @SpyMan je voudrais faire un coktail molotov j'ai déjà l'item et la texture mais je sais pas comment faire pour qu'on puisse le jeter au sol (comme une potion) et que lorsque on le lance il y aie du feux sur le sol (comme avec un briquet mais sur plusieurs blocs) avec peut-être des particule de fumée lorsqu'on le lance



  • ha cest ez a faire ca, si tu veux je peut te faire du code en quelque minutes x), sauf que ce sera uniquement du code compatible 1.12+



  • En gros c'est un peu comme une dynamite ton truc, tu as juste as faire
    Un Item ou dans la methode onItemRightClick tu met

    if (!player.capabilities.isCreativeMode){
            stack.stackSize--;
        }
     if (!world.isClient) {
            world.spawnEntityInWorld(new TonEntity(world, player));
         }
    

    Ceci permet de faire spawn ton entity quand tu fais un clique droit avec l'item dans la main, ensuite tu fais l'entity
    donc une class qui va extends EntityThrowable et implements IEntityAdditionalSpawnData de tête, tu fais spawn tes blocks de feu dans la méthode onImpact je crois.
    Ensuite dans ClientProxy tu register le rendu (tu peux utiliser celui de la snowball ou créer le tiens c'est comme tu veux)

            RenderingRegistry.registerEntityRenderingHandler(TonEntity.class, new RenderSnowball(TaClass.tonItem));
    

    La tu as vraiment juste une petite base mais pour faire ce que tu veux c'est un bon début ^^



  • @arinonia merci c'est super clair le seul problème qu'il me reste c'est que je sais pas faire spawn un block



  • @arinonia et dans ce code il me dit qu'il trouve pas la class isclient tu sais pourquoi?

    package ch.gonin.guillaume.zombiecubefree.common.items;
    
    import ch.gonin.guillaume.zombiecubefree.common.entity.fireLaunch;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    
    public class CocktailMolotov extends Item {
    
    	@Override
    	public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
    		if (!player.capabilities.isCreativeMode) {
    
    			stack.stackSize--;
    
    		}
    
    		if (!world.isClient) {
    
    			world.spawnEntityInWorld(new fireLaunch(world, player));
    
    		}
    		return super.onItemRightClick(stack, world, player);
    	}
    
    }


  • yo, deja les noms de class en Java doivent avoir une maj a cahque mot exemple : CeciEstUneClass donc rename cette class fireLaunch en EntityFireLaunch mettre aussi le Entity devant va te permettre de savoir que c'est une entity sans avoir besoin de regardé le code de la class

    Ensuite pour faire pop un block rien de plus simple, dans la class World il y a la fonction World#setBlockState(BlockPos, IBlockState)

    ex : world.setBlockState(pos, Blocks.DIRT.getDefaultState())

    attention l'interaction avec le monde doit se faire uniquement coté serveur, donc oubli pas de mettre le check if (!word.isRemote) sinon cela posera problème



  • Je me suis fail isClient c'est pour mcp ^^'
    Et pour faire spawn un Block je t'ai dis tu utilises la methode onImpact tu met :

     this.worldObj.setBlock((int)this.posX, (int)this.posY, (int)this.posZ,Blocks.fire);
    


  • @arinonia je crois que l'objet se lance mais il se passe rien aprés pas de feu en tous cas



  • @Le_Vrai_GG je confirme que sa se lance mais pas d'entité crée ou alors pas de posage de block



  • Déjà tu as fais le renderer et tout ?



  • @arinonia
    Je te donne tous le code:
    Mon item:

    package ch.gonin.guillaume.zombiecubefree.common.items;
    
    import ch.gonin.guillaume.zombiecubefree.common.entity.EntityFireLaunch;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    
    public class CocktailMolotov extends Item {
    
    	@Override
    	public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
    		if (!player.capabilities.isCreativeMode) {
    
    			stack.stackSize--;
    
    		}
    
    		if (!world.isRemote) {
    
    			world.spawnEntityInWorld((new EntityFireLaunch(world, player)));
    
    		}
    		return super.onItemRightClick(stack, world, player);
    	}
    
    }
    

    Mon entitée:

    package ch.gonin.guillaume.zombiecubefree.common.entity;
    
    import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData;
    import io.netty.buffer.ByteBuf;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.projectile.EntityThrowable;
    import net.minecraft.init.Blocks;
    import net.minecraft.util.MovingObjectPosition;
    import net.minecraft.world.World;
    
    public class EntityFireLaunch extends EntityThrowable implements IEntityAdditionalSpawnData {
    
    	World world;
    
    	public EntityFireLaunch(World world, EntityPlayer player) {
    		super(world);
    		this.world = world;
    		// TODO Auto-generated constructor stub
    	}
    
    	@Override
    	public void writeSpawnData(ByteBuf buffer) {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public void readSpawnData(ByteBuf additionalData) {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	protected void onImpact(MovingObjectPosition position) {
    		if (!world.isRemote) {
    			this.worldObj.setBlock((int)this.posX, (int)this.posY, (int)this.posZ,Blocks.gold_block); 
    		}
    
    	}
    
    }
    
    

    Mon ClientProxy

    package ch.gonin.guillaume.zombiecubefree.proxy;
    
    import ch.gonin.guillaume.zombiecubefree.common.TilesEntity.TileEntityTeleSpecialRenderer;
    import ch.gonin.guillaume.zombiecubefree.common.entity.EntityFireLaunch;
    import ch.gonin.guillaume.zombiecubefree.common.items.CocktailMolotov;
    import ch.gonin.guillaume.zombiecubefree.common.TilesEntity.TileEntityTele;
    import cpw.mods.fml.client.registry.ClientRegistry;
    import cpw.mods.fml.client.registry.RenderingRegistry;
    import net.minecraft.client.renderer.entity.RenderSnowball;
    import net.minecraft.item.Item;
    
    public class ClientProxy extends CommonProxy {
    
    	@Override
    
    	public void registerRender()
    
    	{
    
    		System.out.println("méthode côté client");
    		ClientRegistry.bindTileEntitySpecialRenderer(
    				ch.gonin.guillaume.zombiecubefree.common.TilesEntity.TileEntityTele.class,
    				new TileEntityTeleSpecialRenderer());
    		RenderingRegistry.registerEntityRenderingHandler(EntityFireLaunch.class,
    				new RenderSnowball(new CocktailMolotov()));
    
    	}
    
    }
    

    PS: J'ai rien rajouter dans la classe principale. tu peux me dire si il y a besoin de rajouter qqch (pour l'entitée par exemple)?



  • @Le_Vrai_GG je ferme se sujet car j'ai trouver un tuto comment faire et je vais poser la question sous se tutoriel


Log in to reply