Premier commit - inclusion dans le système git
This commit is contained in:
commit
a82de54648
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.classpath
|
||||||
|
.settings
|
||||||
|
.project
|
||||||
|
bin/
|
||||||
8
plugin.yml
Normal file
8
plugin.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
name: Le Ptit Plugin
|
||||||
|
main: com.bernard.ptitPlugin.LePtitPlugin
|
||||||
|
version: beta
|
||||||
|
api-version: 1.13
|
||||||
|
commands:
|
||||||
|
grenze:
|
||||||
|
usage: /grenze list
|
||||||
|
description: Permet de gérer les frontières
|
||||||
28
src/com/bernard/ptitPlugin/LePtitPlugin.java
Normal file
28
src/com/bernard/ptitPlugin/LePtitPlugin.java
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package com.bernard.ptitPlugin;
|
||||||
|
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
public class LePtitPlugin extends JavaPlugin {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
super.onEnable();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisable() {
|
||||||
|
super.onDisable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void setupConfig() {
|
||||||
|
FileConfiguration config = this.getConfig();
|
||||||
|
|
||||||
|
this.saveDefaultConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
package com.bernard.ptitPlugin.construcation;
|
||||||
|
|
||||||
|
public class Construcation {
|
||||||
|
|
||||||
|
}
|
||||||
230
src/com/bernard/ptitPlugin/grenzen/GrenzeModif.java
Normal file
230
src/com/bernard/ptitPlugin/grenzen/GrenzeModif.java
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
package com.bernard.ptitPlugin.grenzen;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.bernard.ptitPlugin.grenzen.Stockeur.Region;
|
||||||
|
|
||||||
|
public class GrenzeModif implements CommandExecutor{
|
||||||
|
|
||||||
|
Stockeur stck;
|
||||||
|
|
||||||
|
Pattern REGNAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_][a-zA-Z0-9.-_]*$");
|
||||||
|
Pattern REGDNAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_][a-zA-Z0-9.-_ :&|$#~’;']*$");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
|
||||||
|
if(!(sender instanceof Player)) {
|
||||||
|
sender.sendMessage("Cette commande doit être envoyée par un joueur !");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(args.length==0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
String subcommand = args[0];
|
||||||
|
|
||||||
|
switch(subcommand) {
|
||||||
|
|
||||||
|
case "new": // nom [displayName] [rayon]
|
||||||
|
// Crée une nouvelle région
|
||||||
|
if(args.length<2)
|
||||||
|
return false;
|
||||||
|
String nom = args[1];
|
||||||
|
String displayName = nom;
|
||||||
|
if(args.length>=3)
|
||||||
|
displayName = args[2];
|
||||||
|
long rayon = 1;
|
||||||
|
try {
|
||||||
|
if(args.length>=4)
|
||||||
|
rayon = Integer.parseInt(args[3]);
|
||||||
|
}catch(NumberFormatException e) {
|
||||||
|
sender.sendMessage("Je ne saurais pas interpréter "+args[3]+" comme un entier …");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(rayon < 0) {
|
||||||
|
sender.sendMessage("Je ne suis pas sur que "+rayon+" soit un entier strictement positif");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(REGNAME_PATTERN.matcher(nom).matches()){
|
||||||
|
sender.sendMessage("Ce nom n'est pas légal !");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(REGDNAME_PATTERN.matcher(displayName).matches()){
|
||||||
|
sender.sendMessage("Ce nom d'affichage n'est pas légal !");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Region r = new Region(new HashSet<>(), nom, displayName, rayon);
|
||||||
|
|
||||||
|
stck.newRegion(r);
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "remove":// nom
|
||||||
|
// Supprime une région
|
||||||
|
if(args.length<2)
|
||||||
|
return false;
|
||||||
|
String nom1 = args[1];
|
||||||
|
|
||||||
|
if(!stck.delRegion(nom1)) {
|
||||||
|
sender.sendMessage("Je ne connais pas la région "+nom1+" !");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
sender.sendMessage("Région supprimée !");
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "name":// nom displayName
|
||||||
|
//Définit le nom d'affichage d'une région
|
||||||
|
if(args.length<2)
|
||||||
|
return false;
|
||||||
|
String nom2 = args[1];
|
||||||
|
String displayName2 = nom2;
|
||||||
|
if(args.length>=3)
|
||||||
|
displayName = args[2];
|
||||||
|
|
||||||
|
if(REGDNAME_PATTERN.matcher(displayName2).matches()){
|
||||||
|
sender.sendMessage("Ce nom d'affichage n'est pas légal !");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!stck.dnameRegion(nom2,displayName2)) {
|
||||||
|
sender.sendMessage("Je ne connais pas la région "+nom2+" !");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
sender.sendMessage("Nom d'affichage changé !");
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "list":
|
||||||
|
// Liste les régions enregistrées, et d'autres infos (nbre points, region)
|
||||||
|
|
||||||
|
sender.sendMessage("Voici la liste des régions enregistrées");
|
||||||
|
for (Region reg : stck.regions) {
|
||||||
|
sender.sendMessage(" - "+reg.nom+" as "+reg.displayName+" : "+reg.points.size()+ " points enregistrés");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "addpt": // nom [x z]
|
||||||
|
if(args.length<2)
|
||||||
|
return false;
|
||||||
|
String nom3 = args[1];
|
||||||
|
int x,z;
|
||||||
|
double poids = 1.;
|
||||||
|
if(args.length<4) {
|
||||||
|
if(!(sender instanceof Player)) {
|
||||||
|
sender.sendMessage("Si vous n'envoyez cette commande en tant que joueur, vous devez préciser les coordonées !");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Location loc = ((Player)sender).getLocation();
|
||||||
|
x=loc.getBlockX();
|
||||||
|
z=loc.getBlockZ();
|
||||||
|
if(args.length>=3) {
|
||||||
|
try {
|
||||||
|
poids = Double.parseDouble(args[2]);
|
||||||
|
}catch(NumberFormatException e) {
|
||||||
|
sender.sendMessage("Je ne saurais pas interpréter "+args[2]+" comme un flottant …");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
try {
|
||||||
|
x = Integer.parseInt(args[3]);
|
||||||
|
z = Integer.parseInt(args[4]);
|
||||||
|
}catch(NumberFormatException e) {
|
||||||
|
sender.sendMessage("Je ne saurais pas interpréter "+args[3]+" "+args[4]+" comme des coordonées entières …");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(args.length>=5) {
|
||||||
|
try {
|
||||||
|
poids = Double.parseDouble(args[5]);
|
||||||
|
}catch(NumberFormatException e) {
|
||||||
|
sender.sendMessage("Je ne saurais pas interpréter "+args[2]+" comme un flottant …");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!stck.addPtRegion(nom3,x,z,poids)) {
|
||||||
|
sender.sendMessage("Je ne connais pas la région "+nom3+" !");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "delpt": // nom [x z/*exact*/] // sinon nearest
|
||||||
|
if(args.length<2)
|
||||||
|
return false;
|
||||||
|
String nom4 = args[1];
|
||||||
|
int x4,z4;
|
||||||
|
if(args.length<4) {
|
||||||
|
if(!(sender instanceof Player)) {
|
||||||
|
sender.sendMessage("Si vous n'envoyez cette commande en tant que joueur, vous devez préciser les coordonées !");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Location loc = ((Player)sender).getLocation();
|
||||||
|
x=loc.getBlockX();
|
||||||
|
z=loc.getBlockZ();
|
||||||
|
}else {
|
||||||
|
try {
|
||||||
|
x = Integer.parseInt(args[3]);
|
||||||
|
z = Integer.parseInt(args[4]);
|
||||||
|
}catch(NumberFormatException e) {
|
||||||
|
sender.sendMessage("Je ne saurais pas interpréter "+args[3]+" "+args[4]+" comme des coordonées entières …");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!stck.delNearestPtRegion(nom4,x,z)) {
|
||||||
|
sender.sendMessage("Je ne connais pas la région "+nom3+" !");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "modpt": // nom nx ny nz/*nouvelle*/ [ox oy oz] // sinon nearest
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "clearpts": // nom
|
||||||
|
// Supprime tous les points de la région séléctionnée
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "listpts": // nom
|
||||||
|
// Liste les points de la région, avec le rayon
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "load":
|
||||||
|
// Recharge le fichier des régions
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "modrayon": // rayon
|
||||||
|
// Redéfinit le rayon
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// Afficher l'aide
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Region getReg(String name) {
|
||||||
|
return stck.regions.stream().filter(r->r.nom.equals(name)).findAny().orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
48
src/com/bernard/ptitPlugin/grenzen/Grenzen.java
Normal file
48
src/com/bernard/ptitPlugin/grenzen/Grenzen.java
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package com.bernard.ptitPlugin.grenzen;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
|
|
||||||
|
public class Grenzen implements Listener{
|
||||||
|
|
||||||
|
public static final double PLAYER_UPDATE_DIST2 = 64.; // distance 8
|
||||||
|
|
||||||
|
Stockeur stockeur;
|
||||||
|
|
||||||
|
Map<UUID,Location> lastPlayerPos;
|
||||||
|
Map<UUID,List<Boolean>> whereis;
|
||||||
|
|
||||||
|
public Grenzen() {
|
||||||
|
lastPlayerPos = new HashMap<UUID, Location>();
|
||||||
|
stockeur = new Stockeur();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onMoved(PlayerMoveEvent event) {
|
||||||
|
Player p = event.getPlayer();
|
||||||
|
if(!lastPlayerPos.containsKey(p.getUniqueId()) || p.getLocation().distanceSquared(lastPlayerPos.get(p.getUniqueId())) > PLAYER_UPDATE_DIST2) {
|
||||||
|
lastPlayerPos.put(p.getUniqueId(), p.getLocation());
|
||||||
|
|
||||||
|
List<Boolean> plast = whereis.get(p.getUniqueId());
|
||||||
|
List<Boolean> pWhereIs = stockeur.regionsIn(p.getLocation());
|
||||||
|
for (int i = 0; i < plast.size(); i++) {
|
||||||
|
if(pWhereIs.get(i)!=plast.get(i)) {
|
||||||
|
if(pWhereIs.get(i)) {
|
||||||
|
//Est rentré
|
||||||
|
p.sendMessage("Vous entrez dans le territoire "+stockeur.getDisplayName(i));
|
||||||
|
}else {
|
||||||
|
// Est sorti
|
||||||
|
p.sendMessage("Vous sortez du territoire "+stockeur.getDisplayName(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
167
src/com/bernard/ptitPlugin/grenzen/Stockeur.java
Normal file
167
src/com/bernard/ptitPlugin/grenzen/Stockeur.java
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
package com.bernard.ptitPlugin.grenzen;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.OptionalInt;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
|
|
||||||
|
public class Stockeur {
|
||||||
|
|
||||||
|
public static final String FILENAME = "regions.yml";
|
||||||
|
|
||||||
|
List<Region> regions = new ArrayList<>();
|
||||||
|
|
||||||
|
public Stockeur() {
|
||||||
|
if(!new File(FILENAME).exists())
|
||||||
|
saveFile();
|
||||||
|
readFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Boolean> regionsIn(Location l){
|
||||||
|
List<Boolean> poz = new ArrayList<Boolean>(regions.size());
|
||||||
|
|
||||||
|
for(Region r : regions) {
|
||||||
|
double d2 = 0;
|
||||||
|
for(PointPondere p : r.points)
|
||||||
|
d2 += (l.getBlockX()-p.x)*(l.getBlockX()-p.x)+(l.getBlockZ()-p.z)*(l.getBlockZ()-p.z);
|
||||||
|
poz.add(d2<=r.rayon);
|
||||||
|
}
|
||||||
|
|
||||||
|
return poz;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayName(int index) {
|
||||||
|
return regions.get(index).displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readFile() {
|
||||||
|
|
||||||
|
ConfigurationSection cs = YamlConfiguration.loadConfiguration(new File(FILENAME));
|
||||||
|
Map<String,Object> regs = cs.getConfigurationSection("regions").getValues(false);
|
||||||
|
List<Region> regions = new ArrayList<Stockeur.Region>();
|
||||||
|
for(String nom : regs.keySet()) {
|
||||||
|
ConfigurationSection reg = cs.getConfigurationSection(nom);
|
||||||
|
List<Object[]> pts = (List<Object[]>) reg.get("points");
|
||||||
|
Set<PointPondere> ptz = pts.stream().map(p -> new PointPondere((int)p[0],(int)p[1],p.length>2?(int)p[2]:1)).collect(Collectors.toSet());
|
||||||
|
String dName = reg.getString("displayName");
|
||||||
|
long rayon = reg.getLong("rayon");
|
||||||
|
regions.add(new Region(ptz, nom, dName,rayon));
|
||||||
|
}
|
||||||
|
this.regions = regions;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveFile() {
|
||||||
|
YamlConfiguration file = new YamlConfiguration();
|
||||||
|
ConfigurationSection regionsCS = file.createSection("regions");
|
||||||
|
for(Region r : regions) {
|
||||||
|
|
||||||
|
ConfigurationSection region = regionsCS.createSection(r.nom);
|
||||||
|
region.set("displayName", r.displayName);
|
||||||
|
region.set("rayon", r.rayon);
|
||||||
|
List<Object[]> lo = r.points.stream().map(pp -> new Object[] {pp.x,pp.z,pp.poids}).collect(Collectors.toList());
|
||||||
|
region.set("points", lo);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
file.save(new File(FILENAME));
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static class Region{
|
||||||
|
|
||||||
|
Set<PointPondere> points;
|
||||||
|
String nom;
|
||||||
|
String displayName;
|
||||||
|
long rayon;
|
||||||
|
|
||||||
|
public Region(Set<PointPondere> points, String nom, String displayName, long rayon) {
|
||||||
|
this.points = points;
|
||||||
|
this.nom = nom;
|
||||||
|
this.displayName = displayName;
|
||||||
|
this.rayon = rayon;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class PointPondere{
|
||||||
|
|
||||||
|
int x,z;
|
||||||
|
double poids;
|
||||||
|
public PointPondere(int x, int z, double poids) {
|
||||||
|
this.x = x;
|
||||||
|
this.z = z;
|
||||||
|
this.poids = poids;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void newRegion(Region r) {
|
||||||
|
regions.add(r);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean delRegion(String name) {
|
||||||
|
OptionalInt index = IntStream.range(0, regions.size()).filter(i-> regions.get(i).nom.contentEquals(name)).findAny();
|
||||||
|
if(index.isPresent()) {
|
||||||
|
regions.remove(index.getAsInt());
|
||||||
|
return true;
|
||||||
|
}else
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean dnameRegion(String nom2, String displayName2) {
|
||||||
|
for(Region r : regions) {
|
||||||
|
if(r.nom.contentEquals(nom2)) {
|
||||||
|
r.displayName = displayName2;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean addPtRegion(String nom3, int x, int z, double poids) {
|
||||||
|
for(Region r : regions) {
|
||||||
|
if(r.nom.contentEquals(nom3)) {
|
||||||
|
r.points.add(new PointPondere(x, z, poids));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int delNearestPtRegion(String nom4, int x, int z) {
|
||||||
|
for(Region r : regions) {
|
||||||
|
if(r.nom.contentEquals(nom4)) {
|
||||||
|
|
||||||
|
int dcarre = 0;
|
||||||
|
for (PointPondere pp : r.points) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
5
src/com/bernard/ptitPlugin/mobiseur/Mobiseur.java
Normal file
5
src/com/bernard/ptitPlugin/mobiseur/Mobiseur.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package com.bernard.ptitPlugin.mobiseur;
|
||||||
|
|
||||||
|
public class Mobiseur {
|
||||||
|
|
||||||
|
}
|
||||||
5
src/com/bernard/ptitPlugin/unicitax/Unicitax.java
Normal file
5
src/com/bernard/ptitPlugin/unicitax/Unicitax.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package com.bernard.ptitPlugin.unicitax;
|
||||||
|
|
||||||
|
public class Unicitax {
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user