# Système de Logements

Ce document présente comment configurer et utiliser le système de logements (houses) dans le plugin Horizons.

## 📂 Structure des Fichiers

Les logements sont gérés via plusieurs fichiers de configuration situés dans le dossier `plugins/Horizons/`:

* `houses.yml` - Stocke les informations sur les maisons
* `config.yml` - Contient les paramètres généraux du système, notamment les formats des panneaux

## 🏗️ Types de Logements

### Types Disponibles

Le plugin supporte deux types de logements :

| Type     | Description                                   | Monnaie Utilisée  |
| -------- | --------------------------------------------- | ----------------- |
| `PLAYER` | Maisons appartenant à des joueurs individuels | Points personnels |
| `TEAM`   | Maisons appartenant à des équipes entières    | Points d'équipe   |

## 🛠️ Commandes

Le système de logements est géré par la commande principale `/house` ou son alias `/housing`.

### Commandes Disponibles

| Commande                                   | Description                                 | Permission                   |
| ------------------------------------------ | ------------------------------------------- | ---------------------------- |
| `/house create <nom> <team\|player>`       | Crée une nouvelle maison                    | horizons.house.create        |
| `/house forsale <nom> <prix>`              | Met une maison en vente                     | horizons.house.forsale       |
| `/house addmember <nom> <joueur>`          | Ajoute un membre à une maison               | *Propriétaire*               |
| `/house removemember <nom> <joueur>`       | Retire un membre d'une maison               | *Propriétaire*               |
| `/house list [page]`                       | Liste toutes les maisons                    | horizons.house.list          |
| `/house delete <nom>`                      | Supprime une maison                         | horizons.house.delete        |
| `/house setsign <nom>`                     | Définit un panneau pour une maison          | horizons.house.setsign       |
| `/house restrictteam <nom> [équipe\|none]` | Restreint l'achat d'une maison à une équipe | horizons.house.restrictteam  |
| `/house setmaxmembers <nom> <nombre>`      | Définit le nombre maximum de membres        | horizons.house.setmaxmembers |

## 🔑 Créer une Maison

Pour créer une maison, vous devez d'abord sélectionner une zone avec WorldEdit, puis utiliser la commande `/house create`.

### Étapes pour créer une maison :

1. Obtenez l'outil de sélection WorldEdit avec `//wand`
2. Sélectionnez deux points opposés pour définir la zone
3. Exécutez `/house create <nom> <team|player>`

## 💰 Vente et Achat de Maisons

### Mettre une maison en vente

Utilisez la commande `/house forsale <nom> <prix>` pour mettre une maison en vente à un prix spécifique.

### Acheter une maison

Les joueurs peuvent acheter une maison en cliquant sur un panneau de vente. Notez que:

* Pour les maisons de type `PLAYER`, le coût est prélevé uniquement des points personnels du joueur
* Pour les maisons de type `TEAM`, le coût est prélevé des points de l'équipe du joueur

### Restrictions d'achat par équipe

Vous pouvez restreindre l'achat d'une maison à une équipe spécifique :

* Pour restreindre : `/house restrictteam <nom> <équipe>`
* Pour supprimer la restriction : `/house restrictteam <nom> none`
* Pour vérifier la restriction actuelle : `/house restrictteam <nom>`

## 🚪 Gestion des Membres

### Maisons de joueurs

Les propriétaires peuvent ajouter/retirer des membres :

* `/house addmember <nom> <joueur>` - Ajoute un membre à la maison
* `/house removemember <nom> <joueur>` - Retire un membre de la maison

#### Limite de membres

Chaque maison de type `PLAYER` possède une limite configurable de membres:

* La limite par défaut est de 3 membres
* Utilisez `/house setmaxmembers <nom> <nombre>` pour modifier cette limite
* Le propriétaire n'est pas compté dans cette limite car il a accès automatiquement

### Maisons d'équipe

Pour les maisons d'équipe, tous les membres de l'équipe ont automatiquement accès à la maison.

## 🪧 Panneaux de Maisons

Les maisons demandent d'avoir des panneaux informatifs qui permettent de les acheter.

### Configuration des Panneaux

Utilisez la commande `/house setsign <nom>` en visant un panneau pour l'associer à une maison.

### Format des Panneaux

Les formats d'affichage des panneaux sont configurables dans `config.yml` :

#### Maisons à vendre

```yaml
houses:
  signs:
    for-sale:
      line1: "&9『 {type} 』"
      line2: "&f⌂ &e{name}"
      line3: "&a&l✦ À VENDRE ✦"
      line4: "&e{price}"
```

#### Maisons occupées

```yaml
houses:
  signs:
    occupied:
      line1: "&9『 {type} 』"
      line2: "&f⌂ &e{name}"
      line3: "&c&l❖ OCCUPÉE ❖"
      line4: "&7Propriétaire: &f{owner}"
```

### Placeholders disponibles

| Placeholder          | Description                                 |
| -------------------- | ------------------------------------------- |
| `{type}`             | Type de maison (Équipe/Joueur)              |
| `{name}`             | Nom de la maison                            |
| `{price}`            | Prix avec la devise                         |
| `{owner}`            | Nom du propriétaire                         |
| `{team}`             | Nom de l'équipe (pour les maisons d'équipe) |
| `{team_restriction}` | Équipe ayant le droit d'acheter la maison   |
| `{max_members}`      | Nombre maximum de membres autorisés         |
| `{current_members}`  | Nombre actuel de membres                    |
| `{members_count}`    | Affichage "actuel/maximum" des membres      |

## 🔄 Cycle de Vie d'une Maison

1. **Création** : Un administrateur crée la maison avec WorldEdit et `/house create`
2. **Mise en vente** : La maison est mise en vente avec `/house forsale`
3. **Achat** : Un joueur achète la maison, devenant propriétaire
4. **Utilisation** : Le propriétaire peut ajouter des membres (jusqu'à la limite configurée)

## 🏠 Configuration des Maisons

Chaque maison dans `houses.yml` possède plusieurs propriétés configurables :

```yaml
houses:
  MaMaison:
    world: world
    owner: df7d5ec6-eb81-4588-92e4-63b607481348
    forSale: false
    price: 1500
    type: PLAYER
    max-members: 3  # Limite de membres configurable
    signs:
      '0':
        world: world
        position: -22.0,-42.0,-62.0
```

## ♻️ Rechargement du Système

Le système de maisons peut être rechargé via la commande `/horizons reload housing`. Cette commande:

* Recharge la configuration
* Met à jour toutes les maisons
* Actualise les panneaux

## 📋 Exemple Complet

### Création et configuration d'une maison

```
# Sélectionner une zone avec WorldEdit
//wand
(sélectionner deux points)

# Créer une maison d'équipe
/house create VillaDeluxe team

# Mettre la maison en vente
/house forsale VillaDeluxe 10000

# Configurer un panneau
/house setsign VillaDeluxe 
(viser un panneau)

# Restreindre l'achat à une équipe
/house restrictteam VillaDeluxe Aventuriers
```

### Gestion des membres d'une maison personnelle

```
# Définir la limite de membres pour une maison
/house setmaxmembers MaMaison 5

# Ajouter des membres à la maison
/house addmember MaMaison Joueur1
/house addmember MaMaison Joueur2

# Retirer un membre de la maison
/house removemember MaMaison Joueur1
```

## 🛡️ Permissions

| Permission                   | Description                                   |
| ---------------------------- | --------------------------------------------- |
| horizons.house.create        | Permet de créer des maisons                   |
| horizons.house.forsale       | Permet de mettre des maisons en vente         |
| horizons.house.admin         | Accès complet à toutes les fonctionnalités    |
| horizons.house.delete        | Permet de supprimer des maisons               |
| horizons.house.setsign       | Permet de configurer des panneaux             |
| horizons.house.restrictteam  | Permet de restreindre l'achat à une équipe    |
| horizons.house.setmaxmembers | Permet de modifier la limite de membres       |
| horizons.house.help          | Permet d'afficher toutes les commandes d'aide |

## 🧠 Concepts Avancés

### Interaction avec WorldGuard

Le système de logements utilise WorldGuard pour gérer les régions protégées. Chaque maison est associée à une région WorldGuard portant le préfixe "house\_" suivi du nom de la maison.

### Intégration avec le Système d'Équipes

* Les maisons d'équipe utilisent le système d'équipes du plugin
* Le coût des maisons d'équipe est prélevé des points d'équipe
* Tous les membres de l'équipe ont accès aux maisons d'équipe

### Logique de Paiement

* Maisons personnelles (PLAYER) : Le coût est prélevé uniquement des points personnels du joueur
* Maisons d'équipe (TEAM) : Le coût est prélevé des points de l'équipe du joueur

### Gestion des Membres

* Le propriétaire a toujours accès à sa maison et n'est pas compté dans la limite de membres
* Il est impossible d'ajouter le propriétaire comme membre car il a déjà accès
* Chaque maison a une limite configurable de membres (la valeur par défaut est 3)

### Mise à jour des Panneaux

Les panneaux de maisons sont automatiquement mis à jour :

* Lors du chargement du plugin
* Lors de la mise en vente d'une maison
* Lors de l'achat d'une maison
* Lors de la modification des restrictions d'équipe

### Protection des Panneaux

Les panneaux associés aux maisons sont protégés contre la destruction par les joueurs non-administrateurs.
