« FastAsyncWorldEdit » : différence entre les versions
Autres actions
Création |
m SVG Balises : Révoqué Éditeur visuel : basculé |
||
Ligne 4 : | Ligne 4 : | ||
{{Infobox Plugin | {{Infobox Plugin | ||
|nom=FastAsyncWorldEdit | |nom=FastAsyncWorldEdit | ||
|image=FAWE_Logo. | |image=FAWE_Logo.svg | ||
|legende=Logo de FastAsyncWorldEdit | |legende=Logo de FastAsyncWorldEdit | ||
|type=Construction | |type=Construction |
Version du 18 octobre 2025 à 12:50
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 |
|
Édition avancée |
|
Outils supplémentaires |
|
Gestion |
|
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