Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

FastAsyncWorldEdit

Version optimisée de WorldEdit avec traitement asynchrone, éditions massives sans lag, heightmaps depuis images, brushes avancés et gestion mémoire intelligente
Version datée du 18 octobre 2025 à 12:59 par Hiob (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)



Logo de FastAsyncWorldEdit
Logo de FastAsyncWorldEdit
FastAsyncWorldEdit
Type
Construction
Développeur
IntellectualSites (Empire92, N0tMyFaultOG, dordsor21)
Ressources
Documentation
Hangar
Modrinth
Spigot
Code source
Compatibilité
Dépendance(s)
Aucune
Compatible avec


FastAsyncWorldEdit (FAWE) est une version améliorée et accélérée de WorldEdit offrant des performances jusqu'à 20 fois supérieures pour les éditions massives de terrain. Il est conçu pour supporter les modifications extrêmes sans lag ni crash.

Description

FastAsyncWorldEdit est un fork optimisé de WorldEdit qui utilise des algorithmes asynchrones et multi-threadés pour permettre des éditions de terrain massives sans impacter les performances du serveur.

Fonctionnalités

Catégorie Fonctionnalités
Performance
  • Traitement asynchrone : éditions en arrière-plan
  • Multi-threading : utilisation de tous les cœurs CPU
  • Jusqu'à 20x plus rapide que WorldEdit vanilla
  • Pas de lag sur éditions massives (millions de blocs)
  • Mémoire optimisée : compression intelligente
  • Rollback instant : annulation sans lag
  • Disk caching : évite les OOM (Out of Memory)
Édition avancée
  • Toutes les commandes WorldEdit standard
  • Heightmaps : terrains depuis images
  • Schematics améliorés (format .schem)
  • Brushes customisables : patterns avancés
  • Masques complexes : combinaisons multiples
  • Transformations : rotate, flip, deform
  • Expressions mathématiques avancées
  • Biomes : modification rapide
Outils supplémentaires
  • CFI (Create From Image) : terrains depuis images
  • Voxel Sniper intégré
  • Navigation : /jumpto, /thru, /up
  • Clipboard étendu : opérations multiples
  • History étendue : rollback amélioré
  • Brush visualizer : preview en temps réel
  • Lighting fix : correction automatique
Gestion
  • Limits configurables : par joueur/groupe
  • Disk/Memory modes : selon besoins
  • Whitelist de blocs : sécurité
  • Preloading : génération anticipée chunks
  • Queue system : gestion priorités
  • Logging : traçabilité éditions
  • API complète : intégration plugins
Compatibilité

Installation

Prérequis

  • Serveur : Paper 1.18.2+ (recommandé), Spigot
  • Java : Java 17+ (21 pour Minecraft 1.20.5+)
  • RAM : 4 GB minimum, 8+ GB recommandé
  • CPU : Multi-cœurs recommandé

Structure des fichiers

plugins/FastAsyncWorldEdit/
  ├── config.yml              # Configuration principale
  ├── config-legacy.yml       # Config WorldEdit legacy
  ├── limits.yml              # Limites par groupe/joueur
  ├── commands.yml            # Personnalisation commandes
  ├── worldedit-config.yml    # Config WorldEdit standard
  ├── schematics/             # Stockage schematics
  │   └── *.schem
  ├── heightmaps/             # Images pour heightmaps
  │   └── *.png
  ├── brushes/                # Brushes customisées
  ├── sessions/               # Sessions joueurs (cache)
  └── history/                # Historique éditions

Configuration

Config principale (config.yml)

Performance optimization :

# plugins/FastAsyncWorldEdit/config.yml

queue:
  # Traitement asynchrone (recommandé)
  parallel-threads: 4  # Nombre de threads (cores CPU - 2)
  
  # Mode de stockage
  # DISK = lent mais pas de limite mémoire
  # MEMORY = rapide mais consomme RAM
  type: MEMORY
  
  # Taille max queue avant flush
  target-size: 64

limits:
  # Max blocs modifiables (0 = illimité pour op)
  default:
    maximum-blocks: 50000000  # 50 millions
    maximum-entities: 1337
    maximum-iterations: 1000
    
  # Activer limites strictes
  use-disk: true
  
  # Max changements stockés en mémoire
  max-memory-percent: 95

history:
  # Taille historique (rollback)
  size: 15
  
  # Compression (économise RAM)
  compress: true
  
  # Stockage sur disque si trop gros
  use-disk: true

lighting:
  # Fix lighting automatique (recommandé OFF pour perfs)
  mode: 0  # 0=off, 1=server, 2=client
  
  # Async lighting
  async: true

clipboard:
  # Compression clipboard
  compression-level: 1
  
  # Disque si trop gros
  use-disk: true

Optimisation pour gros serveurs :

# Pour serveurs avec beaucoup de joueurs
queue:
  parallel-threads: 8  # Plus de threads
  type: DISK           # Éviter OOM
  
limits:
  max-memory-percent: 80  # Laisser RAM au serveur
  
history:
  size: 5              # Moins d'historique
  use-disk: true       # Toujours sur disque

Limites par groupe (limits.yml)

# plugins/FastAsyncWorldEdit/limits.yml

# Groupes LuckPerms
groups:
  default:
    maximum-blocks: 100000        # 100k blocs
    maximum-entities: 50
    maximum-iterations: 500
    max-changes: 5                # 5 rollbacks
    
  builder:
    maximum-blocks: 5000000       # 5M blocs
    maximum-entities: 200
    maximum-iterations: 2000
    max-changes: 10
    
  admin:
    maximum-blocks: 50000000      # 50M blocs
    maximum-entities: 1000
    maximum-iterations: 5000
    max-changes: 50

# Permissions individuelles
users:
  Notch:
    maximum-blocks: 999999999     # Illimité

Integration avec permissions

Permissions LuckPerms :

# Accès WorldEdit de base
/lp group builder permission set worldedit.* true

# Limites spécifiques
/lp group builder permission set fawe.limit true

# Commandes avancées
/lp group admin permission set fawe.admin true

# Bypass toutes limites
/lp group owner permission set fawe.bypass true

# Permissions spécifiques
/lp group builder permission set worldedit.region.* true
/lp group builder permission set worldedit.selection.* true
/lp group builder permission set worldedit.clipboard.* true

Commandes

Commandes de base (WorldEdit standard)

Commande Description Exemple
//wand Obtenir l'outil de sélection //wand
//pos1 Définir position 1 //pos1
//pos2 Définir position 2 //pos2
//set <block> Remplir sélection //set stone
//replace <from> <to> Remplacer blocs //replace dirt grass_block
//copy Copier sélection //copy
//cut Couper sélection //cut
//paste Coller clipboard //paste
//undo Annuler dernière action //undo
//redo Refaire action annulée //redo

Commandes FAWE spécifiques

Commande Description Exemple
//fast Toggle mode rapide //fast
//>pos1 Pos1 asynchrone //>pos1
//fixlighting Corriger lumière //fixlighting
//cfi Create From Image //cfi
//cancel Annuler action en cours //cancel
//queue Info sur la queue //queue
//gtexture Texture depuis bloc //gtexture
//replaceall Replace dans tout le monde //replaceall dirt stone
//count Compter blocs sélection //count stone
//distr Distribution des blocs //distr

Sélections avancées

# Sélection chunk entier
//chunk

# Sélection par région (avec WorldGuard)
//region <nom>

# Expansion sélection
//expand 10 up     # 10 blocs vers le haut
//expand vert      # Jusqu'à bedrock et sky
//expand 20 north  # 20 blocs au nord

# Contraction
//contract 5 down

# Sélection polygonale
//sel poly

# Sélection sphérique
//sel sphere

Patterns avancés

# Pattern simple
//set stone

# Multiple blocs (random)
//set stone,dirt,grass_block

# Avec pourcentages
//set 70%stone,20%dirt,10%cobblestone

# Pattern depuis clipboard
//set #clipboard

# Pattern gradient
//set stone,grass_block:#gradient

# Pattern depuis image
//set #imageheight:image.png

# Expressions
//set %x%y%z  # Pattern mathématique

Masques avancés

# Masque simple
//gmask stone  # Affecter uniquement stone

# Masque inverse
//gmask !stone  # Tout sauf stone

# Masque multiple
//gmask stone,dirt,grass_block

# Masque par hauteur
//gmask >60  # Au-dessus Y=60

# Masque par biome
//gmask $jungle

# Masque combiné
//gmask stone,dirt >60 !#existing  # Stone/dirt, Y>60, sans blocs existants

# Désactiver masque
//gmask

Brushes

# Brush sphère
//br sphere stone 5  # Rayon 5

# Brush cylindre
//br cylinder grass_block 5 3  # Rayon 5, hauteur 3

# Brush smooth
//br smooth 3  # Adoucir terrain

# Brush clipboard
//br copy  # Coller clipboard en brush

# Taille brush
/size 10

# Masque brush
/mask grass_block  # N'affecter que l'herbe

# Désactiver brush
//br none

Exemples d'utilisation

Terrain depuis image

# 1. Placer image dans plugins/FastAsyncWorldEdit/heightmaps/
# Format: PNG, blanc=haut, noir=bas

# 2. Lancer CFI
//cfi

# 3. Suivre le menu interactif
# Ou en une commande:
//cfi heightmap.png

Construction massive

# Pyramide géante
//pyramid stone 100  # Base 100x100

# Sphère creuse
//hsphere glass 50

# Cylindre
//cyl stone 30 50  # Rayon 30, hauteur 50

# Forêt aléatoire
//forest 1000  # 1000 arbres

Terraforming

# Adoucir terrain
//sel convex  # Sélection convexe
//smooth 5    # Lisser 5 itérations

# Élever terrain
//raise 10

# Abaisser terrain
//lower 5

# Déformer
//deform y+=0.2*sin(x*5)

Schematics

# Sauvegarder
//copy
//schem save maison

# Charger
//schem load maison
//paste

# Lister
//schem list

# Avec rotation
//rotate 90
//paste

Intégrations

PlotSquared

FAWE s'intègre parfaitement avec PlotSquared :

# plugins/PlotSquared/settings/worlds.yml
worlds:
  plotworld:
    fawe:
      # Limites par plot
      max-blocks: 1000000
      max-entities: 500

WorldGuard

# Sélectionner région WorldGuard
//region spawn

# Éditer dans région uniquement
//gmask $spawn  # Masque par région

API pour développeurs

// Dépendance Maven
<dependency>
    <groupId>com.fastasyncworldedit</groupId>
    <artifactId>FastAsyncWorldEdit-Core</artifactId>
    <version>2.9.2</version>
    <scope>provided</scope>
</dependency>

// Utilisation
import com.fastasyncworldedit.core.FaweAPI;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.block.BlockTypes;

public void setBlockAsync(org.bukkit.World world, int x, int y, int z) {
    World weWorld = BukkitAdapter.adapt(world);
    
    try (EditSession editSession = WorldEdit.getInstance()
            .newEditSessionBuilder()
            .world(weWorld)
            .fastMode(true)  // Mode FAWE rapide
            .build()) {
        
        BlockVector3 pos = BlockVector3.at(x, y, z);
        editSession.setBlock(pos, BlockTypes.STONE.getDefaultState());
    }
}

Dépannage

Problèmes courants

OutOfMemoryError :

# config.yml
queue:
  type: DISK  # Utiliser disque au lieu de RAM
  
limits:
  max-memory-percent: 80
  use-disk: true
  
history:
  use-disk: true
# Augmenter RAM serveur
java -Xmx8G -jar server.jar

Lag lors d'éditions :

# config.yml
queue:
  parallel-threads: 2  # Réduire threads

lighting:
  mode: 0  # Désactiver lighting auto

Actions annulées automatiquement :

# Augmenter les limites
/lp group builder permission set fawe.limit.2000000
# 2M blocs max

Lighting cassée après édition :

# Corriger manuellement
//fixlighting

# Ou activer auto-fix
# config.yml: lighting.mode: 1

Conflit avec WorldEdit :

# Supprimer WorldEdit
rm plugins/WorldEdit*.jar

# Ne garder que FAWE
plugins/
  └── FastAsyncWorldEdit-Bukkit-*.jar

Commandes de diagnostic

# Info version
/version FastAsyncWorldEdit

# État de la queue
//queue

# Mémoire utilisée
/fawe debugpaste

# Annuler action bloquée
//cancel

Performance

Benchmarks

Tests sur serveur Paper 1.20.1, CPU 8 cores, 16GB RAM :

Opération WorldEdit FAWE Gain
//set 1M blocs ~45s ~2.5s 18x plus rapide
//copy structure 500k blocs ~30s ~1.8s 16x plus rapide
//smooth région 200x200 ~60s ~4s 15x plus rapide
//replace 5M blocs ~3min ~8s 22x plus rapide
Schematic load+paste 1M ~25s ~1.5s 16x plus rapide

Optimisation maximale

# config.yml - Configuration performance extrême
queue:
  parallel-threads: 8  # Tous les cores
  type: MEMORY         # RAM si disponible
  target-size: 128     # Grande queue
  
limits:
  use-disk: false      # Tout en RAM
  max-memory-percent: 90
  
history:
  size: 2              # Minimal
  compress: true
  use-disk: false
  
lighting:
  mode: 0              # OFF
  async: true
  
clipboard:
  compression-level: 0  # Pas de compression
  use-disk: false

Voir aussi

Liens externes

Références