|
|
|
@ -0,0 +1,794 @@
|
|
|
|
|
package net.mc_pandacraft.java.plugin.pandacraftutils.survival_cuboid;
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
import java.util.Collection;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Random;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
|
|
import net.mc_pandacraft.java.plugin.pandacraftutils.ConfigManager;
|
|
|
|
|
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
|
|
|
|
|
import net.mc_pandacraft.java.plugin.pandacraftutils.plugin_interface.EssentialsInterface;
|
|
|
|
|
import net.mc_pandacraft.java.plugin.pandacraftutils.plugin_interface.WorldEditInterface;
|
|
|
|
|
import net.mc_pandacraft.java.util.StringUtil;
|
|
|
|
|
|
|
|
|
|
import org.bukkit.ChatColor;
|
|
|
|
|
import org.bukkit.World;
|
|
|
|
|
import org.bukkit.command.Command;
|
|
|
|
|
import org.bukkit.command.CommandExecutor;
|
|
|
|
|
import org.bukkit.command.CommandSender;
|
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
import org.bukkit.plugin.Plugin;
|
|
|
|
|
|
|
|
|
|
import com.sk89q.worldedit.Vector;
|
|
|
|
|
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
|
|
|
|
import com.sk89q.worldedit.bukkit.selections.CuboidSelection;
|
|
|
|
|
import com.sk89q.worldedit.bukkit.selections.Selection;
|
|
|
|
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
|
|
|
import com.sk89q.worldguard.domains.DefaultDomain;
|
|
|
|
|
import com.sk89q.worldguard.protection.UnsupportedIntersectionException;
|
|
|
|
|
import com.sk89q.worldguard.protection.databases.ProtectionDatabaseException;
|
|
|
|
|
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
|
|
|
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
|
|
|
|
|
|
|
|
public class CommandCubo implements CommandExecutor {
|
|
|
|
|
|
|
|
|
|
private PandacraftUtils plugin;
|
|
|
|
|
|
|
|
|
|
private WorldGuardPlugin wgPlugin;
|
|
|
|
|
|
|
|
|
|
private String regex_cubo_id = "cubo[0-9]+-[0-9A-Za-z_]+-[0-9A-Za-z_]+";
|
|
|
|
|
|
|
|
|
|
public CommandCubo(PandacraftUtils pl) {
|
|
|
|
|
plugin = pl;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Plugin wg = plugin.getServer().getPluginManager().getPlugin("WorldGuard");
|
|
|
|
|
|
|
|
|
|
// WorldGuard may not be loaded
|
|
|
|
|
if (wg == null || !(wg instanceof WorldGuardPlugin)) {
|
|
|
|
|
try { throw new Exception("Impossible de récupérer l'instance du plugin WorldGuard");
|
|
|
|
|
} catch (Exception e) { e.printStackTrace(); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wgPlugin = (WorldGuardPlugin) wg;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean onCommand(CommandSender sender, Command command,
|
|
|
|
|
String label, String[] args) {
|
|
|
|
|
|
|
|
|
|
if (args.length == 0 || !(sender instanceof Player))
|
|
|
|
|
{
|
|
|
|
|
showHelp(sender);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// la commande contient au moins un paramètre et la personne qui fait la commande est un Joueur
|
|
|
|
|
Player player = (Player) sender;
|
|
|
|
|
|
|
|
|
|
// on vérifie que le joueur se trouve bien dans un monde dans lequel on peut cubo
|
|
|
|
|
if (!ConfigManager.getInstance().CuboCommand_worlds.contains(player.getWorld().getName()))
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Les cubos ne se font pas sur cette map");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (args[0].equalsIgnoreCase("devis"))
|
|
|
|
|
{
|
|
|
|
|
CuboidSelection selection = WorldEditInterface.getPlayerCuboSelection(player);
|
|
|
|
|
if (selection == null)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous devez faire une sélection WorldEdit : faites "+ChatColor.GRAY+"//wand");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (hasStaffPermission(player) && args.length >= 3 && plugin.getServer().getPlayer(args[2]) == null)
|
|
|
|
|
{ // un joueur est indiqué mais il n'est pas connecté
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Le joueur concerné n'est pas en ligne");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// on cherche si on traite un autre joueur
|
|
|
|
|
Player player_cubo;
|
|
|
|
|
if (!hasStaffPermission(player) || args.length < 2 || (player_cubo = plugin.getServer().getPlayer(args[1])) == null)
|
|
|
|
|
player_cubo = player;
|
|
|
|
|
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"----- Devis pour la création d'un cubo -----");
|
|
|
|
|
if (player != player_cubo)
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GOLD+"----- Devis pour la création d'un cubo -----");
|
|
|
|
|
|
|
|
|
|
// vérifie si la sélection interfère avec un cubo existant
|
|
|
|
|
// on crée un cubo factice (qui ne sera pas enregistré)
|
|
|
|
|
ProtectedCuboidRegion cubo = new ProtectedCuboidRegion("null", selection.getNativeMinimumPoint().toBlockVector(), selection.getNativeMaximumPoint().toBlockVector());
|
|
|
|
|
// on récupère les cubos de la map pour les comparer
|
|
|
|
|
Collection<ProtectedRegion> regions = wgPlugin.getRegionManager(selection.getWorld()).getRegions().values();
|
|
|
|
|
boolean intersect = true;
|
|
|
|
|
List<ProtectedRegion> intersect_region = null;
|
|
|
|
|
try {
|
|
|
|
|
intersect_region = ((ProtectedRegion)cubo).getIntersectingRegions(Arrays.asList(regions.toArray(new ProtectedRegion[1])));
|
|
|
|
|
if (intersect_region.size()==0) intersect = false;
|
|
|
|
|
} catch (UnsupportedIntersectionException e) { }
|
|
|
|
|
|
|
|
|
|
if (intersect)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"La sélection rentre en contact avec au moins un cubo existant");
|
|
|
|
|
if (player != player_cubo)
|
|
|
|
|
player_cubo.sendMessage(ChatColor.RED+"La sélection rentre en contact avec au moins un cubo existant");
|
|
|
|
|
if (intersect_region != null)
|
|
|
|
|
{
|
|
|
|
|
for(ProtectedRegion region : intersect_region)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"- "+ChatColor.GRAY+region.getId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (player != player_cubo)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Pour le joueur "+ChatColor.RESET+player_cubo.getDisplayName());
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GOLD+"Devis fait par "+ChatColor.RESET+player.getDisplayName());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// on vérifie si le joueur peut payer
|
|
|
|
|
double actual_money = EssentialsInterface.getPlayerMoney(player_cubo);
|
|
|
|
|
|
|
|
|
|
int volume_actuel_cubo = getPlayerActualBlockCount(player_cubo, selection.getWorld());
|
|
|
|
|
int volume_apres_cubo = volume_actuel_cubo + cubo.volume();
|
|
|
|
|
double prix_actuel_cubo = getVolumePrice(volume_actuel_cubo);
|
|
|
|
|
double prix_apres_cubo = getVolumePrice(volume_apres_cubo);
|
|
|
|
|
double prix_a_payer = prix_apres_cubo - prix_actuel_cubo;
|
|
|
|
|
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Solde actuel : "+StringUtil.formatDouble(actual_money));
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Prix à payer : "+StringUtil.formatDouble(prix_a_payer));
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Solde futur : "+StringUtil.formatDouble(actual_money - prix_a_payer));
|
|
|
|
|
|
|
|
|
|
if (player != player_cubo)
|
|
|
|
|
{
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GOLD+"Solde actuel : "+StringUtil.formatDouble(actual_money));
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GOLD+"Prix à payer : "+StringUtil.formatDouble(prix_a_payer));
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GOLD+"Futur solde : "+StringUtil.formatDouble(actual_money - prix_a_payer));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (actual_money - prix_a_payer < 0)
|
|
|
|
|
{
|
|
|
|
|
// le joueur ne peut pas payer
|
|
|
|
|
if (player == player_cubo)
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous ne pouvez pas payer");
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
player.sendMessage(player_cubo.getDisplayName()+ChatColor.RED+" ne peut pas payer");
|
|
|
|
|
player_cubo.sendMessage(ChatColor.RED+"Vous ne pouvez pas payer");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (args[0].equalsIgnoreCase("creer") && args.length >= 2)
|
|
|
|
|
{
|
|
|
|
|
String nom_cubo = args[1];
|
|
|
|
|
|
|
|
|
|
if (!nom_cubo.matches("[0-9a-zA-Z_]+"))
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Le nom du cubo n'est pas valide : il doit contenir des lettres/chiffres et tiret du bas "+ChatColor.GRAY+"_");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CuboidSelection selection = WorldEditInterface.getPlayerCuboSelection(player);
|
|
|
|
|
if (selection == null)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous devez faire une sélection WorldEdit : faites "+ChatColor.GRAY+"//wand");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (hasStaffPermission(player) && args.length >= 3 && plugin.getServer().getPlayer(args[2]) == null)
|
|
|
|
|
{ // un joueur est indiqué mais il n'est pas connecté
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Le joueur concerné n'est pas en ligne");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// on cherche si on traite un autre joueur
|
|
|
|
|
Player player_cubo;
|
|
|
|
|
if (!hasStaffPermission(player) || args.length < 3 || (player_cubo = plugin.getServer().getPlayer(args[2])) == null)
|
|
|
|
|
player_cubo = player;
|
|
|
|
|
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"----- Création d'un cubo -----");
|
|
|
|
|
if (player != player_cubo)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Pour le joueur "+ChatColor.RESET+player_cubo.getDisplayName());
|
|
|
|
|
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GOLD+"----- Création d'un cubo -----");
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GOLD+"Protection faite par "+ChatColor.RESET+player.getDisplayName());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// vérifie si la sélection interfère avec un cubo existant
|
|
|
|
|
|
|
|
|
|
// on crée le cubo
|
|
|
|
|
String id_cubo;
|
|
|
|
|
do
|
|
|
|
|
id_cubo = "cubo"+(new Random()).nextInt(1000000000)+"-"+player_cubo.getName()+"-"+nom_cubo;
|
|
|
|
|
while(wgPlugin.getRegionManager(selection.getWorld()).hasRegion(id_cubo));
|
|
|
|
|
ProtectedCuboidRegion cubo = new ProtectedCuboidRegion(id_cubo, selection.getNativeMinimumPoint().toBlockVector(), selection.getNativeMaximumPoint().toBlockVector());
|
|
|
|
|
DefaultDomain owners = new DefaultDomain();
|
|
|
|
|
owners.addPlayer(player_cubo.getName());
|
|
|
|
|
cubo.setOwners(owners);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// on récupère les cubos de la map pour les comparer
|
|
|
|
|
Collection<ProtectedRegion> regions = wgPlugin.getRegionManager(selection.getWorld()).getRegions().values();
|
|
|
|
|
boolean intersect = true;
|
|
|
|
|
List<ProtectedRegion> intersect_region = null;
|
|
|
|
|
try {
|
|
|
|
|
intersect_region = ((ProtectedRegion)cubo).getIntersectingRegions(Arrays.asList(regions.toArray(new ProtectedRegion[1])));
|
|
|
|
|
if (intersect_region.size()==0) intersect = false;
|
|
|
|
|
} catch (UnsupportedIntersectionException e) { }
|
|
|
|
|
|
|
|
|
|
if (intersect)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"La protection ne peut pas se faire");
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Faites "+ChatColor.GRAY+"/cubo devis"+ChatColor.RED+" pour en connaitre la raison");
|
|
|
|
|
if (player != player_cubo)
|
|
|
|
|
player_cubo.sendMessage(ChatColor.RED+"La protection ne peut pas se faire");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// on vérifie si le joueur peut payer
|
|
|
|
|
double actual_money = EssentialsInterface.getPlayerMoney(player_cubo);
|
|
|
|
|
|
|
|
|
|
int volume_actuel_cubo = getPlayerActualBlockCount(player_cubo, selection.getWorld());
|
|
|
|
|
int volume_apres_cubo = volume_actuel_cubo + cubo.volume();
|
|
|
|
|
double prix_actuel_cubo = getVolumePrice(volume_actuel_cubo);
|
|
|
|
|
double prix_apres_cubo = getVolumePrice(volume_apres_cubo);
|
|
|
|
|
double prix_a_payer = prix_apres_cubo - prix_actuel_cubo;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (actual_money - prix_a_payer < 0)
|
|
|
|
|
{
|
|
|
|
|
// le joueur ne peut pas payer
|
|
|
|
|
|
|
|
|
|
player.sendMessage(ChatColor.RED+"La protection ne peut pas se faire");
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Faites "+ChatColor.GRAY+"/cubo devis"+ChatColor.RED+" pour en connaitre la raison");
|
|
|
|
|
if (player != player_cubo)
|
|
|
|
|
player_cubo.sendMessage(ChatColor.RED+"La protection ne peut pas se faire");
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GOLD+"Ancien solde : "+StringUtil.formatDouble(actual_money));
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GOLD+"Prix à payer : "+StringUtil.formatDouble(prix_a_payer));
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GOLD+"Nouveau solde : "+StringUtil.formatDouble(actual_money - prix_a_payer));
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GREEN+"L'argent est automatiquement retiré de votre compte");
|
|
|
|
|
if (player != player_cubo)
|
|
|
|
|
player.sendMessage(ChatColor.GREEN+"L'argent est automatiquement retiré du compte de "+ChatColor.RESET+player_cubo.getDisplayName());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// on crée le cubo :
|
|
|
|
|
wgPlugin.getRegionManager(selection.getWorld()).addRegion(cubo);
|
|
|
|
|
player.sendMessage(ChatColor.GREEN+"La protection "+ChatColor.GRAY+cubo.getId()+ChatColor.GREEN+" a bien été réalisée");
|
|
|
|
|
if (player != player_cubo)
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GREEN+"La protection "+ChatColor.GRAY+cubo.getId()+ChatColor.GREEN+" a bien été réalisée");
|
|
|
|
|
|
|
|
|
|
// on retire l'argent
|
|
|
|
|
EssentialsInterface.getPlayer(player_cubo).setMoney(new BigDecimal(actual_money - prix_a_payer));
|
|
|
|
|
EssentialsInterface.getPlayer(player_cubo).save();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (args[0].equalsIgnoreCase("liste"))
|
|
|
|
|
{
|
|
|
|
|
int num_page = 1;
|
|
|
|
|
try {
|
|
|
|
|
if (args.length >= 2)
|
|
|
|
|
num_page = Integer.parseInt(args[1]);
|
|
|
|
|
} catch (NumberFormatException e) { }
|
|
|
|
|
|
|
|
|
|
// on cherche si on traite un autre joueur
|
|
|
|
|
String player_cubo = player.getName();
|
|
|
|
|
if (hasStaffPermission(player) && args.length >= 3)
|
|
|
|
|
player_cubo = args[2];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<ProtectedCuboidRegion> cubos = getPlayerCubo(player_cubo, player.getWorld());
|
|
|
|
|
|
|
|
|
|
int nb_page = (int)Math.ceil(cubos.size()/5D);
|
|
|
|
|
if (num_page > nb_page) num_page = nb_page;
|
|
|
|
|
if (num_page < 1) num_page = 1;
|
|
|
|
|
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"----- Liste des cubos de "+ChatColor.GRAY+player_cubo+ChatColor.GOLD+" -----");
|
|
|
|
|
if (cubos.size() == 0)
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Aucun cubo à afficher");
|
|
|
|
|
|
|
|
|
|
for (int i=(num_page-1)*5; i<num_page*5 && i<cubos.size(); i++)
|
|
|
|
|
{
|
|
|
|
|
ProtectedCuboidRegion cubo = cubos.get(i);
|
|
|
|
|
// TODO afficher plus d'infos sur ces cubos
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+cubo.getId()+" : "+cubo.volume()+" cubes");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"---------- Page "+num_page+"/"+nb_page+" ----------");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Dans la suite des sous-commandes, on a besoin de la protection dans le quel se trouve le joueur
|
|
|
|
|
*
|
|
|
|
|
* Si ce cubo n'existe pas, le reste des sous-commandes n'est pas exécutable
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// on parcours les cubos dans lesquels on se trouve, on garde le premier valide, si il existe
|
|
|
|
|
ProtectedCuboidRegion inside_cubo = null;
|
|
|
|
|
for(ProtectedRegion cubo : wgPlugin.getRegionManager(player.getWorld()).getApplicableRegions(player.getLocation()))
|
|
|
|
|
{
|
|
|
|
|
if (!(cubo instanceof ProtectedCuboidRegion)) continue;
|
|
|
|
|
if (!cubo.getId().matches(regex_cubo_id)) continue;
|
|
|
|
|
inside_cubo = (ProtectedCuboidRegion) cubo;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (args[0].equalsIgnoreCase("info"))
|
|
|
|
|
{
|
|
|
|
|
if (inside_cubo == null)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous ne vous trouvez dans aucun cubo");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int dim_x = inside_cubo.getMinimumPoint().getBlockX() + inside_cubo.getMaximumPoint().getBlockX() + 1;
|
|
|
|
|
int dim_y = inside_cubo.getMinimumPoint().getBlockY() + inside_cubo.getMaximumPoint().getBlockY() + 1;
|
|
|
|
|
int dim_z = inside_cubo.getMinimumPoint().getBlockZ() + inside_cubo.getMaximumPoint().getBlockZ() + 1;
|
|
|
|
|
Vector midpoint = Vector.getMidpoint(inside_cubo.getMinimumPoint(), inside_cubo.getMaximumPoint());
|
|
|
|
|
String proprio = inside_cubo.getOwners().toUserFriendlyString();
|
|
|
|
|
String membres = inside_cubo.getMembers().toUserFriendlyString();
|
|
|
|
|
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"----- Information sur la protection -----");
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Identifiant : "+ChatColor.GRAY+inside_cubo.getId());
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Dimensions : "+ChatColor.GRAY+"x="+dim_x+" y="+dim_y+" z="+dim_z);
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Localisation : "+ChatColor.GRAY+"x="+midpoint.getBlockX()+" y="+midpoint.getBlockY()+" z="+midpoint.getBlockZ());
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Volume : "+ChatColor.GRAY+inside_cubo.volume());
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Propriétaire : "+ChatColor.GRAY+proprio);
|
|
|
|
|
player.sendMessage(ChatColor.GOLD+"Usagers : "+ChatColor.GRAY+membres);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (args[0].equalsIgnoreCase("selectionner"))
|
|
|
|
|
{
|
|
|
|
|
if (inside_cubo == null)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous ne vous trouvez dans aucun cubo");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (!inside_cubo.isOwner(player.getName()) && !hasStaffPermission(player))
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous n'avez pas la permission de faire cette action pour ce cubo");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WorldEditPlugin wePlugin = WorldEditInterface.getPlugin();
|
|
|
|
|
Selection sel = new CuboidSelection(player.getWorld(), inside_cubo.getMinimumPoint(), inside_cubo.getMaximumPoint());
|
|
|
|
|
wePlugin.setSelection(player, sel);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (args[0].equalsIgnoreCase("supprimer") && args.length == 1)
|
|
|
|
|
{
|
|
|
|
|
if (inside_cubo == null)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous ne vous trouvez dans aucun cubo");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (!inside_cubo.isOwner(player.getName()) && !hasStaffPermission(player))
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous n'avez pas la permission de faire cette action pour ce cubo");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Set<String> player_name = inside_cubo.getOwners().getPlayers();
|
|
|
|
|
if (player_name == null || player_name.isEmpty())
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Ce cubo n'a aucun propriétaire");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
String proprio_cubo = player_name.toArray(new String[1])[0];
|
|
|
|
|
|
|
|
|
|
double actu_money = EssentialsInterface.getPlugin().getUser(proprio_cubo).getMoney().doubleValue();
|
|
|
|
|
|
|
|
|
|
int actu_volume_cubo = getPlayerActualBlockCount(proprio_cubo, player.getWorld());
|
|
|
|
|
int new_volume_cubo = actu_volume_cubo - inside_cubo.volume();
|
|
|
|
|
double money_win = getVolumePrice(actu_volume_cubo) - getVolumePrice(new_volume_cubo);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wgPlugin.getRegionManager(player.getWorld()).removeRegion(inside_cubo.getId());
|
|
|
|
|
EssentialsInterface.getPlugin().getUser(proprio_cubo).setMoney(new BigDecimal(actu_money + money_win));
|
|
|
|
|
|
|
|
|
|
Player player_cubo = plugin.getServer().getPlayerExact(proprio_cubo);
|
|
|
|
|
|
|
|
|
|
player.sendMessage(ChatColor.GREEN+"Le cubo "+ChatColor.GRAY+inside_cubo.getId()+ChatColor.GREEN+" a été supprimé");
|
|
|
|
|
if (player_cubo != null && player_cubo != player)
|
|
|
|
|
{
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GREEN+"Le cubo "+ChatColor.GRAY+inside_cubo.getId()+ChatColor.GREEN+" a été supprimé");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (player_cubo != player)
|
|
|
|
|
{ // le joueur gère le cubo d'un autre joueur (en ligne ou non)
|
|
|
|
|
player.sendMessage(ChatColor.GREEN+"L'argent a été restauré sur le compte de "+ChatColor.GRAY+((player_cubo == null)?proprio_cubo:player_cubo.getName()));
|
|
|
|
|
if (player_cubo != null)
|
|
|
|
|
player_cubo.sendMessage(ChatColor.GREEN+"L'argent a été restauré sur votre compte");
|
|
|
|
|
}
|
|
|
|
|
else // le joueur gère son propre cubo
|
|
|
|
|
player.sendMessage(ChatColor.GREEN+"L'argent a été restauré sur votre compte");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (args[0].equalsIgnoreCase("ajouter") && args.length >= 2)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (inside_cubo == null)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous ne vous trouvez dans aucun cubo");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (!inside_cubo.isOwner(player.getName()) && !hasStaffPermission(player))
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous n'avez pas la permission de faire cette action pour ce cubo");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String new_user = args[1];
|
|
|
|
|
|
|
|
|
|
if (!new_user.matches("[0-9a-azA-Z_]{2,16}"))
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Le pseudo indiqué n'est pas valide");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inside_cubo.getMembers().addPlayer(new_user);
|
|
|
|
|
try {
|
|
|
|
|
wgPlugin.getRegionManager(player.getWorld()).save();
|
|
|
|
|
} catch (ProtectionDatabaseException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
player.sendMessage(ChatColor.GREEN+"Vous venez d'ajouter "+ChatColor.GRAY+new_user+ChatColor.GREEN+" dans le cubo");
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (args[0].equalsIgnoreCase("enlever") && args.length >= 2)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (inside_cubo == null)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous ne vous trouvez dans aucun cubo");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (!inside_cubo.isOwner(player.getName()) && !hasStaffPermission(player))
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous n'avez pas la permission de faire cette action pour ce cubo");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String old_user = args[1];
|
|
|
|
|
|
|
|
|
|
if (!old_user.matches("[0-9a-azA-Z_]{2,16}"))
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Le pseudo indiqué n'est pas valide");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inside_cubo.getMembers().removePlayer(old_user);
|
|
|
|
|
try {
|
|
|
|
|
wgPlugin.getRegionManager(player.getWorld()).save();
|
|
|
|
|
} catch (ProtectionDatabaseException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
player.sendMessage(ChatColor.GREEN+"Vous venez de retirer "+ChatColor.GRAY+old_user+ChatColor.GREEN+" du cubo");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (args[0].equalsIgnoreCase("donner") && args.length >= 2)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (inside_cubo == null)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous ne vous trouvez dans aucun cubo");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (!inside_cubo.isOwner(player.getName()) && !hasStaffPermission(player))
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Vous n'avez pas la permission de faire cette action pour ce cubo");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String new_user = args[1];
|
|
|
|
|
|
|
|
|
|
if (plugin.getServer().getPlayer(new_user) == null)
|
|
|
|
|
{
|
|
|
|
|
player.sendMessage(ChatColor.RED+"Le joueur indiqué n'est pas connecté");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Player new_proprio = plugin.getServer().getPlayer(new_user);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inside_cubo.setOwners(new DefaultDomain());
|
|
|
|
|
inside_cubo.getOwners().addPlayer(new_proprio.getName());
|
|
|
|
|
inside_cubo.setMembers(new DefaultDomain());
|
|
|
|
|
try {
|
|
|
|
|
wgPlugin.getRegionManager(player.getWorld()).save();
|
|
|
|
|
} catch (ProtectionDatabaseException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
player.sendMessage(ChatColor.GREEN+"Vous venez de donner la parcelle courante à "+ChatColor.RESET+new_proprio.getDisplayName());
|
|
|
|
|
player.sendMessage(player.getDisplayName()+ChatColor.GREEN+" viens de vous donner la parcelle "+ChatColor.GRAY+inside_cubo.getId());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// on arrive ici si aucune des sous commandes correspond à celle tapée
|
|
|
|
|
sender.sendMessage(ChatColor.RED+"Mauvaise utilisation de la commande "+ChatColor.GRAY+"/cubo"+ChatColor.RED+". Faites "+ChatColor.GRAY+"/cubo"+ChatColor.RED+" pour connaitre l'utilisation");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void showHelp(CommandSender sender) {
|
|
|
|
|
|
|
|
|
|
String[] messages = null;
|
|
|
|
|
if ((sender instanceof Player) && hasStaffPermission((Player)sender))
|
|
|
|
|
{ // pour le staff connecté
|
|
|
|
|
String[] m = {
|
|
|
|
|
ChatColor.GOLD+"----- Assistant de protection en Survie -----",
|
|
|
|
|
ChatColor.GRAY+"/cubo devis [Pseudo]"+ChatColor.GOLD+" pour calculer le prix du cubo et estimer sa faisabilité. Précisez le pseudo si ce n'est pas pour vous",
|
|
|
|
|
ChatColor.GRAY+"/cubo creer <NomDuCubo> [Pseudo]"+ChatColor.GOLD+" pour créer le cubo. Précisez le pseudo si ce n'est pas pour vous",
|
|
|
|
|
ChatColor.GRAY+"/cubo info"+ChatColor.GOLD+" pour afficher les infos du cubo dans lequel vous êtes",
|
|
|
|
|
ChatColor.GRAY+"/cubo selectionner"+ChatColor.GOLD+" pour faire une sélection WorldEdit du cubo dans lequel vous êtes",
|
|
|
|
|
ChatColor.GRAY+"/cubo supprimer"+ChatColor.GOLD+" pour supprimer le cubo dans lequel vous êtes",
|
|
|
|
|
ChatColor.GRAY+"/cubo ajouter <Pseudo>"+ChatColor.GOLD+" pour ajouter un usager dans le cubo dans lequel vous êtes",
|
|
|
|
|
ChatColor.GRAY+"/cubo enlever <Pseudo>"+ChatColor.GOLD+" pour enlever un usager du cubo dans lequel vous êtes",
|
|
|
|
|
ChatColor.GRAY+"/cubo liste <Page> [Pseudo]"+ChatColor.GOLD+" pour lister vos cubos. Précisez le pseudo si vous voulez lister les cubos d'un autre joueur",
|
|
|
|
|
ChatColor.GRAY+"/cubo donner <Pseudo>"+ChatColor.GOLD+" pour donner le cubo dans lequel vous êtes à un joueur",
|
|
|
|
|
ChatColor.GOLD+"------------------------------------------"
|
|
|
|
|
};
|
|
|
|
|
messages = m;
|
|
|
|
|
}
|
|
|
|
|
else if (sender instanceof Player)
|
|
|
|
|
{ // pour les joueurs
|
|
|
|
|
String[] m = {
|
|
|
|
|
ChatColor.GOLD+"----- Assistant de protection en Survie -----",
|
|
|
|
|
ChatColor.GRAY+"/cubo devis"+ChatColor.GOLD+" pour calculer le prix du cubo et estimer sa faisabilité",
|
|
|
|
|
ChatColor.GRAY+"/cubo creer <NomDuCubo>"+ChatColor.GOLD+" pour créer le cubo si il est faisable.",
|
|
|
|
|
ChatColor.GRAY+"/cubo info"+ChatColor.GOLD+" pour afficher les infos du cubo dans lequel vous êtes",
|
|
|
|
|
ChatColor.GRAY+"/cubo selectionner"+ChatColor.GOLD+" pour faire une sélection WorldEdit du cubo dans lequel vous êtes",
|
|
|
|
|
ChatColor.GRAY+"/cubo supprimer"+ChatColor.GOLD+" pour supprimer le cubo dans lequel vous êtes",
|
|
|
|
|
ChatColor.GRAY+"/cubo ajouter <Pseudo>"+ChatColor.GOLD+" pour ajouter un usager dans le cubo dans lequel vous êtes",
|
|
|
|
|
ChatColor.GRAY+"/cubo enlever <Pseudo>"+ChatColor.GOLD+" pour enlever un usager du cubo dans lequel vous êtes",
|
|
|
|
|
ChatColor.GRAY+"/cubo liste <Page>"+ChatColor.GOLD+" pour lister vos cubos",
|
|
|
|
|
ChatColor.GRAY+"/cubo donner <Pseudo>"+ChatColor.GOLD+" pour donner le cubo dans lequel vous êtes à un joueur",
|
|
|
|
|
ChatColor.GOLD+"------------------------------------------"
|
|
|
|
|
};
|
|
|
|
|
messages = m;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{ // pour la console et le reste (pas les joueurs)
|
|
|
|
|
String[] m = {
|
|
|
|
|
ChatColor.GOLD+"----- Assistant de protection en Survie -----",
|
|
|
|
|
ChatColor.GOLD+"Vous devez être connecté pour exécuter les commandes de cubo",
|
|
|
|
|
ChatColor.GOLD+"---------------------------------------------"
|
|
|
|
|
};
|
|
|
|
|
messages = m;
|
|
|
|
|
}
|
|
|
|
|
sender.sendMessage(messages);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param p le joueur
|
|
|
|
|
* @param w le monde
|
|
|
|
|
* @return tout les cubos d'un joueur donné sur un monde donné
|
|
|
|
|
*/
|
|
|
|
|
public List<ProtectedCuboidRegion> getPlayerCubo(Player p, World w) {
|
|
|
|
|
return getPlayerCubo(p.getName(), w);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param p le pseudo du joueur
|
|
|
|
|
* @param w le monde
|
|
|
|
|
* @return tout les cubos d'un joueur donné sur un monde donné
|
|
|
|
|
*/
|
|
|
|
|
public List<ProtectedCuboidRegion> getPlayerCubo(String p, World w) {
|
|
|
|
|
|
|
|
|
|
Map<String, ProtectedRegion> regions = wgPlugin.getRegionManager(w).getRegions();
|
|
|
|
|
List<ProtectedCuboidRegion> playerRegions = new ArrayList<ProtectedCuboidRegion>();
|
|
|
|
|
|
|
|
|
|
for (Map.Entry<String, ProtectedRegion> region : regions.entrySet()) {
|
|
|
|
|
// on ne prend en charge que les cuboides
|
|
|
|
|
if (!(region instanceof ProtectedCuboidRegion))
|
|
|
|
|
continue;
|
|
|
|
|
// on garde les régions gérés par la commande
|
|
|
|
|
if (!region.getKey().matches(regex_cubo_id))
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
if (!region.getValue().isOwner(p))
|
|
|
|
|
continue;
|
|
|
|
|
playerRegions.add((ProtectedCuboidRegion)region.getValue());
|
|
|
|
|
}
|
|
|
|
|
return playerRegions;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @param p le joueur
|
|
|
|
|
* @param w le monde
|
|
|
|
|
* @return le volume total des cubos d'un joueur donné sur un monde donné
|
|
|
|
|
*/
|
|
|
|
|
public int getPlayerActualBlockCount(Player p, World w) {
|
|
|
|
|
return getPlayerActualBlockCount(p.getName(), w);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @param p le joueur
|
|
|
|
|
* @param w le monde
|
|
|
|
|
* @return le volume total des cubos d'un joueur donné sur un monde donné
|
|
|
|
|
*/
|
|
|
|
|
public int getPlayerActualBlockCount(String p, World w) {
|
|
|
|
|
List<ProtectedCuboidRegion> regions = getPlayerCubo(p, w);
|
|
|
|
|
int nb = 0;
|
|
|
|
|
for (ProtectedCuboidRegion region : regions){
|
|
|
|
|
nb += region.volume();
|
|
|
|
|
}
|
|
|
|
|
return nb;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @param nb le volume
|
|
|
|
|
* @return le prix pour le volume donné
|
|
|
|
|
*/
|
|
|
|
|
public double getVolumePrice(int nb) {
|
|
|
|
|
if (nb <= 2000)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
if (nb<= 100000)
|
|
|
|
|
return nb-2000D;
|
|
|
|
|
|
|
|
|
|
return Math.pow(((nb-2000D)/98000D),1.5)*98000;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public boolean hasStaffPermission(Player p) {
|
|
|
|
|
return p.hasPermission("pandacraft.cubo.staff");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|