---
title: Assets
type: docs
weight: 2
---

Les assets dans Hytale représentent le contenu du jeu comme les items, blocs et autres ressources. Comprendre comment travailler avec les assets est essentiel pour créer des expériences de plugin riches.

**Packages:**
- `com.hypixel.hytale.server.core.asset.type.item.config` (Item)
- `com.hypixel.hytale.server.core.asset.type.blocktype.config` (BlockType)
- `com.hypixel.hytale.server.core.inventory` (ItemStack)

## Types d'Assets

Hytale fournit plusieurs types d'assets :

| Type d'Asset | Description |
|--------------|-------------|
| `Item` | Représente un item qui peut être tenu ou stocké |
| `BlockType` | Définit un type de bloc dans le monde |
| `EntityType` | Définit un type d'entité |

## Travailler avec les Items

### Obtenir un Item

```java
import com.hypixel.hytale.server.core.asset.type.item.config.Item;

// Obtenir un item par identifiant
Item sword = Item.getAssetMap().getAsset("hytale:iron_sword");

// Vérifier si l'item existe
if (sword != null) {
    // Utiliser l'item
}
```

### Créer des ItemStacks

```java
import com.hypixel.hytale.server.core.inventory.ItemStack;

// Créer un ItemStack avec une quantité
ItemStack stack = new ItemStack("hytale:iron_sword", 5);

// Ou juste avec l'ID de l'item (quantité par défaut à 1)
ItemStack singleItem = new ItemStack("hytale:iron_sword");

// Accéder aux propriétés
String itemId = stack.getItemId();
int quantity = stack.getQuantity();
```

## Travailler avec les Blocs

### Obtenir un BlockType

```java
import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;

BlockType stone = BlockType.getAssetMap().getAsset("hytale:stone");
```

### Bloc dans le Monde

```java
// Obtenir le bloc à une position
World world = player.getWorld();
BlockType blockType = world.getBlockType(x, y, z);

// Définir le bloc à une position
world.setBlock(x, y, z, "hytale:stone");
```

## Registre d'Assets

Enregistrez des assets personnalisés via votre plugin :

```java
@Override
public void start() {
    // Enregistrer des assets personnalisés
    getAssetRegistry().register(myCustomAsset);
}
```

## Identifiants d'Assets

Les assets sont identifiés par des identifiants avec namespace :

```
namespace:chemin

Exemples:
- hytale:stone
- myplugin:custom_sword
- myplugin:blocks/special_block
```

Le namespace de votre plugin est généralement dérivé du groupe et du nom de votre manifest.

## Packs d'Assets

Les plugins peuvent inclure des packs d'assets embarqués. Définissez `includesAssetPack: true` dans votre manifest :

```json
{
  "name": "MyPlugin",
  "version": "1.0.0",
  "group": "com.example",
  "main": "com.example.myplugin.MyPlugin",
  "includesAssetPack": true
}
```

Les fichiers du pack d'assets doivent être structurés dans votre JAR :

```
assets/
└── myplugin/
    ├── items/
    │   └── custom_sword.json
    └── blocks/
        └── custom_block.json
```

## Bonnes Pratiques

{{< callout type="tip" >}}
- Mettez en cache les références d'assets quand c'est possible pour éviter les recherches répétées
- Vérifiez toujours les null lors de la récupération d'assets par identifiant
- Utilisez des identifiants avec namespace significatifs pour vos assets personnalisés
{{< /callout >}}
