Créer sont Plugin de portail
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 il arrive qu'un de ces codes ne fonctionne pas chez vous, merci de me le signaler.