Créer sont Plugin de portail

0.00 avg. rating (0% score) - 0 votes
Partager:

Après un si long moment d’absence j’ai décidé de faire un article sur les Portail ou « Portal ».
En soit c’est pas si compliqué, pour faire simple si suffit de regarder si le joueur est entre des coordonnées définit et si c’est le qu’a de le téléporter.

Pour mon plugin, j’ai créé une conf de ce genre:


	portals {
        "portal_vers_plat" {
            map=monde_2
            x1=197
            y1=67
            z1=242
            x2=201
            y2=63
            z2=242
            destmap=monde_plat
			destx=-1
			desty=4
			destz=2
        }
		"portal_vers_principal" {
            map=monde_plat
            x1=-3
            y1=4
            z1=0
            x2=1
            y2=8
            z2=0
            destmap=monde_2
			destx=199
			desty=63
			destz=244
        }
	}

On y voit plusieurs chose:
– La conf est regroupé dans une sorte de tableau appelé « portals » qui va comme son nom l’indique va les contenir. C’est pour bien séparer les données de la conf si vous avez d’autre chose dedans…
– Ensuite chaque portail a pour clé son nom et contient à l’intérieur les valeurs dudit portail.
– La clé map contient le nom de la map ou le portail sera actif et la clé destmap contient le nom de la map vers ou on doit téléporter le joueur. Comme vous avez du le deviner c’est pour pour que le portail soit actif seulement dans la bonne map^^.
– Les paramètres x1 y1 z1 et x2 y2 z2 contiennent les coordonnées des angles de la zone de téléportation. On peut définir des zones de taille petite comme gigantesque…
Pour finir destx desty destz sont les coordonnées d’arrivé du joueur.
On ne peut pas faire plus simple^^.

Voici le code de la class:


public class Portals {
	public static void setup(Player player) {
		String worldNamePlayer = player.getWorld().getName();
		int bX = player.getLocation().getBlockX();
		int bY = player.getLocation().getBlockY();
		int bZ = player.getLocation().getBlockZ();
		
		for(Entry<Object, ? extends ConfigurationNode> entry : FileConfig.PORTALS().getChildrenMap().entrySet()) {
			String portalName = (String) entry.getKey();

			String map = entry.getValue().getNode("map").getString();
			int x1 = entry.getValue().getNode("x1").getInt();
			int y1 = entry.getValue().getNode("y1").getInt();
			int z1 = entry.getValue().getNode("z1").getInt();

			String destmap = entry.getValue().getNode("destmap").getString();
			int x2 = entry.getValue().getNode("x2").getInt();
			int y2 = entry.getValue().getNode("y2").getInt();
			int z2 = entry.getValue().getNode("z2").getInt();

			int destx = entry.getValue().getNode("destx").getInt();
			int desty = entry.getValue().getNode("desty").getInt();
			int destz = entry.getValue().getNode("destz").getInt();
			
			if(worldNamePlayer.equals(map)) {
				if( ((bX <= x1 && bX >= x2) || (bX >= x1 && bX <= x2)) && ((bY >= y1 && bY <= y2) || (bY <= y1 && bY >= y2)) && ((bZ >= z1 && bZ <= z2) || (bZ <= z1 && bZ >= z2)) ) {
					Location block = new Location(Sponge.getGame().getServer().getWorld(destmap).get(), destx, desty, destz);
					player.setLocation(block);
					Sponge.getLogger().info("TP vers " + portalName + " du monde " + destmap);
				}
				
			}
		}
	}
}

Pour finir il faut lui donner les portail à charger et c’est ma méthode PORTALS() de ma class FileConfig qui s’en charge:


	public static CommentedConfigurationNode PORTALS() { 
		return config.getNode("portals");
	}

Tous les codes sont testés et sont fonctionnels, si un de ces codes ne marche pas chez vous, merci de me le signaler.
Partager:
0.00 avg. rating (0% score) - 0 votes

Vous aimerez aussi...

Laisser un commentaire