Plugin Résolu Java : plugin de freeze

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 386
1
191
187
Bonjour !

Avant toute chose, je tient à dire que je prévois de m'attaquer aux cours de Java durant les vacances d'avril. Cependant, j'ai tout de même besoin d'un coup de main pour ce que je fais.

Je cherche simplement à coder un petit plugin de freeze :
- Commande /freeze <player> : pose un effet de potion ou une variable sur false qui empêche le joueur de bouger
- Commande /unfreeze <player> : effet inverse x)

J'ai déjà fait un mini micro bout de code xDD Qui permet de créer la commande et d'envoyer un message... wah super puissant.... Mais j'ai cherché à mettre le args[0] de la commande en tant que player et de lui attribuer une variable à mettre sur false, mais sans succès. Je me tourne principalement vers @Detobel36 et @belfedia qui sont calés en la matière, mais toute remarque est la bienvenue. En fait, je sais vraiment pas quel chemin prendre pour coder ça parce que il y a plusieurs manière d'y parvenir, donc je vous demande un coup de main, je me suis bien évidemment aidé des plugins qui sont codés et fonctionnels (dont certains sont opérationnels grâce à ce forum x) ) Voilà je vous met ce que j'ai déjà fait.

Code:
package com.freeze.fr;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;


public class main extends JavaPlugin{
 
    public void onEnable(){
        System.out.println("Plugin de freeze actif !");
    }
 
    public void onDisable(){
        System.out.println("Plugin de freeze inactif !");
    }
 
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    
        Player p = (Player) sender;
    
        if(label.equalsIgnoreCase("freeze")){
            if(args.length==1){
            
                p.sendMessage("§2" + args[0] + "a été freeze !");
            }
        }

        return false;
    }

}
Merci à tous ! :D

AlexFatta
 
Dernière édition:
Bonjour !

Ca avance ! J'ai trouvé ce sur quoi je bloquais, c'était attribuer l'argument en tant que joueur. Donc le freeze marche. Cependant, lorsque le joueur saute, il peut quand même se déplacer (puisque qu'il est l'air il avance un petit peu). Donc si il saut en série, bah il se déplace quand même or vous l'aurez deviné, le but c'est qu'il ne bouge plus du tout. J'ai essayé avec une ArrayList mais ca ne change rien. Je suis en train de me dire que c'est peut être le JumpEvent qui ne marche pas. Enfin bon @Detobel36 je te met le code (toute remarque est bonne à prendre, bonne comme mauvaise ^^ )
PHP:
package com.freeze.fr;


import java.util.ArrayList;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.plugin.java.JavaPlugin;


public class main extends JavaPlugin{
   
    public void onEnable(){
        System.out.println("Plugin de freeze actif !");
        getCommand("freeze").setExecutor(this);
    }
   
    public void onDisable(){
        System.out.println("Plugin de freeze inactif !");
    }
   
    public ArrayList<Player> frozen = new ArrayList<Player>();
   
   
    public void onPlayerJumpEvent(PlayerMoveEvent e){
        Player po = e.getPlayer();
        if(frozen.contains(po.getName())){
            e.setCancelled(true);
        }
    }
   
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
       
        Player p = (Player) sender;
       
        if(label.equalsIgnoreCase("freeze") && sender instanceof Player){
            if(args.length==1){
                Player po = Bukkit.getPlayer(args[0]); //freeze
                if(po == null){
                    return false;
                }else {
                    po.setWalkSpeed(0);
                    po.sendMessage("§cTu as été freeze par " + ChatColor.RED + sender);
                    frozen.add(po);
                }
                p.sendMessage("§2" + args[0] + " a été freeze !");
                return true;
            }
           
        }else if(label.equalsIgnoreCase("unfreeze") && sender instanceof Player){
            if(args.length==1){
                Player po = Bukkit.getPlayer(args[0]); //unfreeze
                if(po == null){
                    return false;
                }else {
                    po.setWalkSpeed((float) 0.2);
                    po.sendMessage("§2Tu as été unfreeze par " + ChatColor.RED + sender);
                    frozen.remove(po);
                }
                p.sendMessage("§2" + args[0] + " a été unfreeze !");
                return true;
            }
        }

        return false;
    }
   

}

Voilà !

Merci à tous ! :D En attendant vos réponses,

AlexFatta
 
Sa me paraît juste, quelques erreurs de convention, d'optimisation et des plus graves.

Essaye ta commande dans la console et tu verra :)
 
Bonjour !

J'essaierai de rentrer la commande par la console et je corrigerai ça mais le problème est que le joueur peut se déplacer en sautant. Ce que je voudrai c'est que quand le joueur saute, il y ai un cancel event (donc que le JumpEvent sois supprimé) mais je sais pas pourquoi cela ne marche pas avec l'array list :/

AlexFatta
 
PlayerJumpEvent n'existe pas. Je l'ai rentré mais il me le refuse. Je laisse juste player et j'appui sur controle espace et PlayerJumpEvent n'y est pas :/ (J'utilise Eclipse)

AlexFatta
 
Bah sinon tu utilise ton meilleur ami Google, tu entre "Bukkit PlayerJumpEvent" et y'aura plein de mecs qui auront fait un topic car ils le trouvaient pas :)
 
Bonjour !

J'ai ajouté ceci :
PHP:
po.addPotionEffect(PotionEffectType.JUMP.createEffect(10000, 128));

Le code total :
PHP:
package com.freeze.fr;


import java.util.ArrayList;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffectType;


public class main extends JavaPlugin implements Listener{
    
    public void onEnable(){
        System.out.println("Plugin de freeze actif !");
        getCommand("freeze").setExecutor(this);
    }
    
    public void onDisable(){
        System.out.println("Plugin de freeze inactif !");
    }
    
    public ArrayList<Player> frozen = new ArrayList<Player>();

    
    public void onPlayerJumpEvent(PlayerMoveEvent e){
        Player po = e.getPlayer();
        if(frozen.contains(po.getName())){
            if(e.getFrom().getY() < e.getTo().getY()){
                e.setCancelled(true);
            }
        }
    }
    
    public void onDamage(EntityDamageEvent d){
        if(frozen.contains(d)){
            d.setCancelled(true);
        }
    }
    
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        
        Player p = (Player) sender;
        
        if(label.equalsIgnoreCase("freeze") && sender instanceof Player){
            if(args.length==1){
                Player po = Bukkit.getPlayer(args[0]); //freeze
                if(po == null){
                    return false;
                }else {
                    po.setWalkSpeed(0);
                    po.sendMessage("§cTu as été freeze par " + ChatColor.RED + sender);
                    po.addPotionEffect(PotionEffectType.JUMP.createEffect(10000, 128));
                    po.setWalkSpeed(0);
                    frozen.add(po);
                }
                p.sendMessage("§2" + args[0] + " a été freeze !");
                return true;
            }
            
        }else if(label.equalsIgnoreCase("unfreeze") && sender instanceof Player){
            if(args.length==1){
                Player po = Bukkit.getPlayer(args[0]); //unfreeze
                if(po == null){
                    return false;
                }else {
                    po.setWalkSpeed((float) 0.2);
                    po.sendMessage("§2Tu as été unfreeze par " + ChatColor.RED + sender);
                    po.removePotionEffect(PotionEffectType.JUMP);
                    frozen.remove(po);
                }
                p.sendMessage("§2" + args[0] + " a été unfreeze !");
                return true;
            }
        }

        return false;
    }
    

}

Le joueur peut encore bouger mais ne peut plus sauter. Si il sprint et qu'il appuie sur espace il peut avancer un petit peu. C'est toujours mieux que rien mais je continuerai de creuser ;) Merci en tout cas ;)

AlexFatta