1.12.2 executer commande en cliquant avec un item



  • Bonsoir,
    J'ai un item "money" et je veux que lorsque on fasse un clic droit dessus ça exécute une commande.
    Je n'ai jamais fais ça et je ne trouve pas comment faire ça. Si quelqu'un aurai un modèle ça m'aiderai 🙂
    thx



  • package com.kporal.mcplus.items;
    
    import java.util.List;
    import java.util.Random;
    
    import javax.annotation.Nullable;
    
    import com.kporal.mcplus.Main;
    
    import net.minecraft.client.resources.I18n;
    import net.minecraft.client.util.ITooltipFlag;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.SoundEvents;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.server.MinecraftServer;
    import net.minecraft.util.ActionResult;
    import net.minecraft.util.EnumActionResult;
    import net.minecraft.util.EnumHand;
    import net.minecraft.util.EnumParticleTypes;
    import net.minecraft.util.SoundCategory;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.util.text.TextComponentString;
    import net.minecraft.util.text.TextFormatting;
    import net.minecraft.world.World;
    import net.minecraftforge.common.DimensionManager;
    import net.minecraftforge.fml.common.FMLCommonHandler;
    import net.minecraftforge.fml.relauncher.Side;
    import net.minecraftforge.fml.relauncher.SideOnly;
    
    public class ItemVoidBreaker extends Item {
    	
    	public ItemVoidBreaker( String name, int stackSize ) {
    		
    		this.setRegistryName( name );
    		this.setTranslationKey( name );
    		this.setCreativeTab( Main.mcptab );
    		this.setMaxStackSize( stackSize );
    		
    	}
    	
    	@Override
    	public ActionResult<ItemStack> onItemRightClick( World world, EntityPlayer player, EnumHand hand ) {
    		if( !world.isRemote ) {
    			
    			String dn = DimensionManager.createProviderFor( player.dimension ).getDimensionType().name().toLowerCase();
    			
    			if( player.isSneaking() ) {
    				player.setSpawnPoint( player.getPosition(), true );
    				//player.sendStatusMessage( new TextComponentString( "Home in " + dn + " set" ), true );
    				//player.sendMessage( new TextComponentString( TextFormatting.AQUA + "MCPlus :: Bed position set in " + dn ));
    			}
    			
    			else if( player.getBedLocation( player.dimension ) != null ) {
    				BlockPos c = player.getBedLocation( player.dimension );
    				double px = c.getX() + 0.5;
    				double py = c.getY() + 1;
    				double pz = c.getZ() + 0.5;
    				
    				if( player.isRiding() ) {
    					player.getRidingEntity().setPositionAndUpdate( px, py, pz );
    				}
    				
    				MinecraftServer s = FMLCommonHandler.instance().getMinecraftServerInstance();
    				s.getCommandManager().executeCommand( s, "/tp " + player.getName() + " " + px + " " + py + " " + pz );
    			}
    		}
    		
    		if( player.isSneaking() ) {
    			addEffect( world, player, 15, EnumParticleTypes.VILLAGER_HAPPY );
    		}
    		else if( player.getBedLocation( player.dimension ) != null ) {
    			addEffect( world, player, 15, EnumParticleTypes.PORTAL );
    			player.playSound( SoundEvents.ENTITY_ENDERMEN_TELEPORT, 0.7F, 1.0F );
    		}
    		
    		return new ActionResult<ItemStack>( EnumActionResult.PASS, player.getHeldItemMainhand() );
    	}
    	
    	private void addEffect( World world, EntityPlayer player, int numParticle, EnumParticleTypes type ) {
    		Random rand = new Random();
    		for( int i = 0; i < numParticle; i++ ) {
    			double posX = player.posX + ( rand.nextDouble() - 0.5D ) * ( double ) player.width;
    			double posY = player.posY + rand.nextDouble() * ( double ) player.height - 0.25D;
    			double posZ = player.posZ + ( rand.nextDouble() - 0.5D ) * ( double ) player.width;
    			double speedX = ( rand.nextDouble() - 0.5D ) * 2.0D;
    			double speedY = -rand.nextDouble();
    			double speedZ = ( rand.nextDouble() - 0.5D ) * 2.0D;
    			world.spawnParticle( type, posX, posY, posZ, speedX, speedY, speedZ );
    		}
    	}
    	
    	@SideOnly( Side.CLIENT )
    	@Override
    	public void addInformation( ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn ) {
    		tooltip.add( TextFormatting.GREEN + I18n.format( "string.void_breaker.tooltip" ));
    		String format = String.format( I18n.format( "string.void_breaker.tooltip.ctrl" ), Main.formatKeyBind( 1 ), Main.formatKeyBind( 2 )).replace( "Format error: ", "" );
    		for( String s : format.split( "," ))
    			tooltip.add( TextFormatting.LIGHT_PURPLE + s );
        }
    }
    

    Cadeau, c'est mon code pour un petit objet de tp utilisant le bed location, tu y trouvera se dont tu as besoin mais n'oublie pas le !isRemote 🙂



  • Bonsoir, ce n'est pas pédagogique d'envoyer du code alors que la question a du être posée au moins 10 fois sur le forum.



  • Possible, cependant pour ma pars j'apprend beaucoup de manière autodidacte, ce n'est pas forcément le cas de tous le monde évidement, et insiter à rechercher la réponse peux avoir du bon c'est vrai, mais ce n'est pas parce que l'on donne volontairement du code que le travail est systématiquement pré-mâcher ou que la personne n'en tire aucun enseignement, à savoir : des méthodes de développement, accessoirement ne pas lui faire perdre des jours de recherche ( puisque en l’occurrence le sujet remonte à 4 jours ), le code ne correspond pas forcément à 100% à sa demande et dans ce cas, la chose apporter n'est que purement démarche à suivre, pour ma pars, même si je suis partiellement d'accord avec toi, c'est typiquement le genre de réponse que je déteste dans tous les sens du terme.

    Ok je lui apporte une réponse toute faite sur un plateau, mais toi tu apporte quoi a pars une réponse non constructive ? bref. Pour finir, l'entraide à plusieurs forme, j'ai simplement choisi celle-ci au vue de la date du sujet ni plus ni moins.



  • Merci bien.


Log in to reply