---
title: Operations Outil
type: docs
weight: 4
---

Les operations d'outil gerent les mecaniques d'edition de blocs reelles lors de l'utilisation des outils de construction.

**Package:** `com.hypixel.hytale.builtin.buildertools.tooloperations`

## Architecture

```
Operations Outil
├── Base
│   └── ToolOperation - Classe de base operation
├── Operations
│   ├── PaintOperation - Peinture de blocs
│   └── EditOperation - Suivi d'edition
├── Materiaux
│   └── Material - Wrapper materiau bloc
└── Utilitaires
    └── CopyCutSettings - Configuration copier/couper
```

## ToolOperation

Classe de base pour toutes les operations d'outil:

```java
public class ToolOperation {
    // Operation de base qui modifie les blocs
    // Suivie pour annuler/refaire
}
```

## PaintOperation

Gere la peinture de blocs avec outils brosse:

```java
public class PaintOperation extends ToolOperation {
    // Applique blocs dans forme brosse
    // Supporte patterns et masques
}
```

### Utilisation

Quand un joueur utilise un outil brosse:
1. PaintOperation est creee
2. La forme est calculee selon parametres outil
3. Les blocs sont modifies selon pattern
4. L'operation est ajoutee a l'historique

## EditOperation

Suit les changements pour annuler/refaire:

```java
public class EditOperation {
    // Enregistre changements de blocs
    // Permet l'inversion
}
```

## Systeme de Materiaux

### Material

Wrapper pour materiaux de blocs:

```java
public class Material {
    // Reference type de bloc
    // Proprietes additionnelles (rotation, teinte)
}
```

### Patterns de Blocs

Les patterns definissent comment les blocs sont selectionnes:

| Pattern | Description |
|---------|-------------|
| `[Stone]` | Type de bloc unique |
| `[50%Stone, 50%Dirt]` | Aleatoire pondere |
| `[Stone, Dirt, Grass]` | Poids egaux |

### Masques de Blocs

Les masques filtrent quels blocs sont affectes:

| Masque | Description |
|--------|-------------|
| `[Stone]` | Affecter uniquement pierre |
| `[!Air]` | Affecter blocs non-air |
| `[!^Fluid]` | Exclure blocs tagues fluide |

## Parametres Copier/Couper

### CopyCutSettings

Configuration pour operations copier et couper:

```java
public class CopyCutSettings {
    // Flag inclure entites
    // Flag inclure donnees biome
    // Niveau compression
}
```

## Arguments Outil

Les outils de construction supportent des arguments configurables:

### Types d'Arguments

| Type | Classe | Description |
|------|--------|-------------|
| Block | `BlockArg` | Selection type bloc |
| Bool | `BoolArg` | Flag booleen |
| Int | `IntArg` | Valeur entiere |
| Float | `FloatArg` | Valeur decimale |
| Mask | `MaskArg` | Masque de blocs |
| String | `StringArg` | Valeur texte |
| BrushShape | `BrushShapeArg` | Sphere, Cube, etc. |
| BrushOrigin | `BrushOriginArg` | Center, Surface, etc. |

### Paquets Arguments Outil

Les arguments se synchronisent via paquets reseau:

```java
// Paquet BuilderToolArgUpdate
// Synchronise changements arguments vers serveur
```

## Configuration Brosse

### Forme Brosse

```java
public enum BrushShape {
    Sphere,
    Cube,
    Cylinder,
    // ...
}
```

### Origine Brosse

```java
public enum BrushOrigin {
    Center,      // Brosse centree sur clic
    Surface,     // Brosse sur surface
    Offset       // Decalage personnalise
}
```

### Axe Brosse

```java
public enum BrushAxis {
    Y,           // Toujours vertical
    View,        // Suivre direction vue
    Surface      // Normal a la surface
}
```

## Utilisation de l'API

### Acceder aux Parametres Outil

```java
BuilderToolsPlugin tools = BuilderToolsPlugin.get();
BuilderToolsUserData userData = tools.getUserData(player);
```

### Obtenir Outil Actuel

```java
BuilderTool currentTool = userData.getCurrentTool();
BuilderToolData toolData = currentTool.getData();
```

## Etat Outil

### BuilderToolState

Suit l'etat actuel de l'outil:

```java
// Paquet BuilderToolState
// Synchronise etat outil vers client
```

### Donnees Brosse

```java
// Paquet BuilderToolBrushData
// Contient taille brosse, forme, pattern
```
