Bon, en réessayant pas-à-pas les solutions évoquées dans le lien cité précédemment j’ai fini par y arriver…
J’ai commencé par :
| player.mcServer.getConfigurationManager().transferPlayerToDimension(player, dimension, ((WorldServer) world).getDefaultTeleporter()); |
| player.setPositionAndUpdate(x + 0.5, y, z + 0.5); |
Mais ça crée toujours un portail du Nether au point de départ…
J’ai continué avec :
| WorldServer ws = player.mcServer.worldServerForDimension(dimension); |
| Teleporter teleporter = ws.getDefaultTeleporter(); |
| player.mcServer.getConfigurationManager().transferPlayerToDimension(player, dimension, teleporter); |
| player.setPositionAndUpdate(x + 0.5, y, z + 0.5); |
Mais malgré la correction consistant à prendre le téléporteur par défaut de la dimension cible, ça créait toujours un portail du Nether au point de départ 
J’ai appliqué l’exemple donné jusqu’au bout :
| WorldServer ws = player.mcServer.worldServerForDimension(dimension); |
| Teleporter teleporter = new MyTeleporter(ws); |
| player.mcServer.getConfigurationManager().transferPlayerToDimension(player, dimension, teleporter); |
| player.setPositionAndUpdate(x + 0.5, y, z + 0.5); |
Plus la classe :
| import net.minecraft.entity.Entity; |
| import net.minecraft.util.MathHelper; |
| import net.minecraft.world.Teleporter; |
| import net.minecraft.world.WorldServer; |
| |
| public class MyTeleporter extends Teleporter |
| { |
| private final WorldServer worldServerInstance; |
| |
| public MyTeleporter(WorldServer par1WorldServer) |
| { |
| super(par1WorldServer); |
| this.worldServerInstance = par1WorldServer; |
| } |
| |
| @Override |
| public void placeInPortal(Entity entity, double p2, double p3, double p4, float p5) |
| { |
| int i = MathHelper.floor_double(entity.posX); |
| int j = MathHelper.floor_double(entity.posY); |
| int k = MathHelper.floor_double(entity.posZ); |
| this.worldServerInstance.getBlock(i, j, k); |
| int height = this.worldServerInstance.getHeightValue(i, k); |
| entity.setPosition( i, height, k ); |
| return; |
| } |
| } |
El là, enfin, ça fonctionne sans créer de portail du Nether !
IL y a quand même un effet de bord (les mobs du coin deviennent invisibles) mais rien de durable (tout revient à la normale quelques secondes après ou à la reconnexion suivante).
Il fallait vraiment virer toutes ces saletés de création de portail dans placeInPortal pour en venir à bout !