package com.freeze.fr;
// DETO: Déjà la, il y a un truc qui cloche... La convention c'est: pays.pseudo.projet
// Exemple: be.detobel36.superprojet
import java.util.ArrayList;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
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;
// DETO: pour les gros projet, il vaut mieux séparer le listener et le main. Car le main doit être
// le plus petit possible
public class main extends JavaPlugin implements Listener{
public void onEnable() {
// DETO: Au lieu d'utiliser des "System.out...", il vaut mieux utiliser un getLogger()
// Car le systeme.out c'est pour java et le Logger est adatpé à bukkit
System.out.println("Plugin de freeze actif !");
getCommand("freeze").setExecutor(this);
getCommand("unfreeze").setExecutor(this);
Bukkit.getServer().getPluginManager().registerEvents(this, this);
}
public void onDisable() {
System.out.println("Plugin de freeze inactif !");
}
// DETO: ça c'est un attribut. Il vaut mieux devant mettre s'il est "private", "protected" ou
// "public"
// Je te conseil également de le mettre tout en haut, car en plein milieu, il risque de se "perdre"
// dans la masse
ArrayList<Player> frozen = new ArrayList<Player>();
public void onPlayerMoveEvent(PlayerMoveEvent e) {
// DETO: les variables doivent être le plus parlante possible. "e" et "p" ça veut rien dire
// ça coute pas grand chose d'écrire "event" ou "player"
Player p = e.getPlayer();
if(frozen.contains(p)){
// DETO: Pourquoi ne pas faire un Location loc = p.getLocation() ? au final ici tu ne
// fais rien... c'est complètement inutile
Location loc = new Location(p.getWorld(), p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ());
p.teleport(loc);
p.sendMessage("§cTu es freeze !");
// DETO: attention au alignement d'accolade (j'ai corrigé)
}
}
// DETO: Encore une fois, "d" ça veut rien dire
public void onDamage(EntityDamageEvent d) {
if(frozen.contains(d)){
d.setCancelled(true);
}
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
// DETO: qui te dis que c'est obligatoirement un player ? Tu test ça dans le "if" après...
// pourquoi déjà le convertir alors que tu ne sais même pas si c'est le cas
Player p = (Player) sender;
if(label.equalsIgnoreCase("freeze") && sender instanceof Player){
if(args.length==1){
Player f = Bukkit.getPlayer(args[0]); //freeze
if(f == null){
return false;
}else {
f.setWalkSpeed(0);
// DETO: Reste logique avec toi même... tu met des "§c" partout et la tu met un
// ChatColor... c'est pas logique tout ça
f.sendMessage("§cTu as été freeze par " + ChatColor.RED + p.getName());
frozen.add(f);
}
p.sendMessage("§2" + args[0] + " a été freeze !");
return true;
}
}else if(label.equalsIgnoreCase("unfreeze") && sender instanceof Player){
if(args.length==1){
Player f = Bukkit.getPlayer(args[0]); //unfreeze
if(f == null){
return false;
}else {
f.setWalkSpeed((float) 0.2);
f.sendMessage("§2Tu as été unfreeze par " + ChatColor.RED + p.getName());
frozen.remove(f);
}
p.sendMessage("§2" + args[0] + " a été unfreeze !");
return true;
}
}
return false;
}
// DETO: à quel moment tu vérifies que le joueur a déjà été freeze ?
}