2014-04-04 22:03:18 +00:00
/ *
* WorldEdit , a Minecraft world manipulation toolkit
* Copyright ( C ) sk89q < http : //www.sk89q.com>
* Copyright ( C ) WorldEdit team and contributors
*
* This program is free software : you can redistribute it and / or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU Lesser General Public License
* for more details .
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
* /
2014-04-03 02:08:50 +00:00
package com.sk89q.worldedit.command ;
2012-03-17 15:35:29 +00:00
import com.sk89q.minecraft.util.commands.Command ;
import com.sk89q.minecraft.util.commands.CommandContext ;
import com.sk89q.minecraft.util.commands.CommandPermissions ;
2012-12-27 16:45:37 +00:00
import com.sk89q.minecraft.util.commands.Logging ;
2014-07-17 07:21:13 +00:00
import com.sk89q.worldedit.EditSession ;
import com.sk89q.worldedit.LocalSession ;
import com.sk89q.worldedit.Vector ;
import com.sk89q.worldedit.Vector2D ;
import com.sk89q.worldedit.WorldEdit ;
import com.sk89q.worldedit.WorldEditException ;
2014-06-28 01:04:34 +00:00
import com.sk89q.worldedit.entity.Player ;
2018-06-19 00:53:15 +00:00
import com.sk89q.worldedit.extension.platform.Capability ;
2014-07-17 07:21:13 +00:00
import com.sk89q.worldedit.function.FlatRegionFunction ;
import com.sk89q.worldedit.function.FlatRegionMaskingFilter ;
import com.sk89q.worldedit.function.biome.BiomeReplace ;
2014-06-28 02:55:38 +00:00
import com.sk89q.worldedit.function.mask.Mask ;
2014-07-17 07:21:13 +00:00
import com.sk89q.worldedit.function.mask.Mask2D ;
import com.sk89q.worldedit.function.operation.Operations ;
import com.sk89q.worldedit.function.visitor.FlatRegionVisitor ;
import com.sk89q.worldedit.regions.CuboidRegion ;
2012-03-17 15:35:29 +00:00
import com.sk89q.worldedit.regions.FlatRegion ;
import com.sk89q.worldedit.regions.Region ;
2014-07-17 07:21:13 +00:00
import com.sk89q.worldedit.regions.Regions ;
2018-06-16 05:29:48 +00:00
import com.sk89q.worldedit.util.Location ;
2014-07-17 07:21:13 +00:00
import com.sk89q.worldedit.util.command.binding.Switch ;
2014-04-05 09:59:38 +00:00
import com.sk89q.worldedit.world.World ;
2014-07-17 07:21:13 +00:00
import com.sk89q.worldedit.world.biome.BaseBiome ;
import com.sk89q.worldedit.world.biome.BiomeData ;
import com.sk89q.worldedit.world.registry.BiomeRegistry ;
2014-04-05 09:59:38 +00:00
import java.util.HashSet ;
import java.util.List ;
import java.util.Set ;
2014-06-28 01:04:34 +00:00
import static com.google.common.base.Preconditions.checkNotNull ;
2014-04-05 09:59:38 +00:00
import static com.sk89q.minecraft.util.commands.Logging.LogMode.REGION ;
2012-03-17 15:35:29 +00:00
2014-06-28 01:04:34 +00:00
/ * *
* Implements biome - related commands such as " /biomelist " .
* /
2012-03-17 15:35:29 +00:00
public class BiomeCommands {
2014-06-28 01:04:34 +00:00
private final WorldEdit worldEdit ;
2012-03-17 15:35:29 +00:00
2014-06-28 01:04:34 +00:00
/ * *
* Create a new instance .
*
* @param worldEdit reference to WorldEdit
* /
public BiomeCommands ( WorldEdit worldEdit ) {
checkNotNull ( worldEdit ) ;
this . worldEdit = worldEdit ;
2012-03-17 15:35:29 +00:00
}
@Command (
aliases = { " biomelist " , " biomels " } ,
usage = " [page] " ,
desc = " Gets all biomes available. " ,
max = 1
)
@CommandPermissions ( " worldedit.biome.list " )
2014-07-17 07:21:13 +00:00
public void biomeList ( Player player , CommandContext args ) throws WorldEditException {
2012-03-17 15:35:29 +00:00
int page ;
int offset ;
int count = 0 ;
if ( args . argsLength ( ) = = 0 | | ( page = args . getInteger ( 0 ) ) < 2 ) {
page = 1 ;
offset = 0 ;
} else {
offset = ( page - 1 ) * 19 ;
}
2018-06-19 00:53:15 +00:00
BiomeRegistry biomeRegistry = WorldEdit . getInstance ( ) . getPlatformManager ( )
. queryCapability ( Capability . GAME_HOOKS ) . getRegistries ( ) . getBiomeRegistry ( ) ;
2014-07-17 07:21:13 +00:00
List < BaseBiome > biomes = biomeRegistry . getBiomes ( ) ;
2012-03-17 15:35:29 +00:00
int totalPages = biomes . size ( ) / 19 + 1 ;
2014-07-17 07:21:13 +00:00
player . print ( " Available Biomes (page " + page + " / " + totalPages + " ) : " ) ;
for ( BaseBiome biome : biomes ) {
2012-03-17 15:35:29 +00:00
if ( offset > 0 ) {
offset - - ;
} else {
2014-07-17 07:21:13 +00:00
BiomeData data = biomeRegistry . getData ( biome ) ;
if ( data ! = null ) {
player . print ( " " + data . getName ( ) ) ;
if ( + + count = = 19 ) {
break ;
}
} else {
player . print ( " <unknown # " + biome . getId ( ) + " > " ) ;
2012-03-17 15:35:29 +00:00
}
}
}
}
@Command (
aliases = { " biomeinfo " } ,
2012-03-21 06:40:35 +00:00
flags = " pt " ,
2012-03-17 15:35:29 +00:00
desc = " Get the biome of the targeted block. " ,
help =
" Get the biome of the block. \ n " +
2012-03-21 06:40:35 +00:00
" By default use all the blocks contained in your selection. \ n " +
2012-03-17 15:35:29 +00:00
" -t use the block you are looking at. \ n " +
2012-03-21 06:40:35 +00:00
" -p use the block you are currently in " ,
2012-03-17 15:35:29 +00:00
max = 0
)
@CommandPermissions ( " worldedit.biome.info " )
2014-07-17 07:21:13 +00:00
public void biomeInfo ( Player player , LocalSession session , CommandContext args ) throws WorldEditException {
2018-06-19 00:53:15 +00:00
BiomeRegistry biomeRegistry = WorldEdit . getInstance ( ) . getPlatformManager ( )
. queryCapability ( Capability . GAME_HOOKS ) . getRegistries ( ) . getBiomeRegistry ( ) ;
2018-06-16 05:29:48 +00:00
Set < BaseBiome > biomes = new HashSet < > ( ) ;
2014-07-17 07:21:13 +00:00
String qualifier ;
2012-03-28 18:04:59 +00:00
if ( args . hasFlag ( 't' ) ) {
2018-06-16 05:29:48 +00:00
Location blockPosition = player . getBlockTrace ( 300 ) ;
2012-03-28 18:04:59 +00:00
if ( blockPosition = = null ) {
player . printError ( " No block in sight! " ) ;
return ;
}
2018-06-16 05:29:48 +00:00
BaseBiome biome = player . getWorld ( ) . getBiome ( blockPosition . toVector ( ) . toVector2D ( ) ) ;
2014-07-17 07:21:13 +00:00
biomes . add ( biome ) ;
qualifier = " at line of sight point " ;
2012-03-28 18:04:59 +00:00
} else if ( args . hasFlag ( 'p' ) ) {
2018-06-16 06:36:55 +00:00
BaseBiome biome = player . getWorld ( ) . getBiome ( player . getLocation ( ) . toVector ( ) . toVector2D ( ) ) ;
2014-07-17 07:21:13 +00:00
biomes . add ( biome ) ;
qualifier = " at your position " ;
2012-03-28 18:04:59 +00:00
} else {
2014-04-05 09:59:38 +00:00
World world = player . getWorld ( ) ;
2012-03-17 15:35:29 +00:00
Region region = session . getSelection ( world ) ;
if ( region instanceof FlatRegion ) {
for ( Vector2D pt : ( ( FlatRegion ) region ) . asFlatRegion ( ) ) {
biomes . add ( world . getBiome ( pt ) ) ;
}
} else {
for ( Vector pt : region ) {
biomes . add ( world . getBiome ( pt . toVector2D ( ) ) ) ;
}
}
2014-07-17 07:21:13 +00:00
qualifier = " in your selection " ;
}
player . print ( biomes . size ( ) ! = 1 ? " Biomes " + qualifier + " : " : " Biome " + qualifier + " : " ) ;
for ( BaseBiome biome : biomes ) {
BiomeData data = biomeRegistry . getData ( biome ) ;
if ( data ! = null ) {
player . print ( " " + data . getName ( ) ) ;
} else {
player . print ( " <unknown # " + biome . getId ( ) + " > " ) ;
2012-03-17 15:35:29 +00:00
}
}
}
2012-03-21 06:40:35 +00:00
@Command (
aliases = { " /setbiome " } ,
usage = " <biome> " ,
flags = " p " ,
desc = " Sets the biome of the player's current block or region. " ,
help =
" Set the biome of the region. \ n " +
2014-07-17 07:21:13 +00:00
" By default use all the blocks contained in your selection. \ n " +
" -p use the block you are currently in "
2012-03-21 06:40:35 +00:00
)
2012-12-27 16:45:37 +00:00
@Logging ( REGION )
2012-03-21 06:40:35 +00:00
@CommandPermissions ( " worldedit.biome.set " )
2014-07-17 07:21:13 +00:00
public void setBiome ( Player player , LocalSession session , EditSession editSession , BaseBiome target , @Switch ( 'p' ) boolean atPosition ) throws WorldEditException {
World world = player . getWorld ( ) ;
Region region ;
2013-03-28 23:53:42 +00:00
Mask mask = editSession . getMask ( ) ;
2014-07-17 07:21:13 +00:00
Mask2D mask2d = mask ! = null ? mask . toMask2D ( ) : null ;
2013-03-28 23:53:42 +00:00
2014-07-17 07:21:13 +00:00
if ( atPosition ) {
2018-06-16 06:36:55 +00:00
region = new CuboidRegion ( player . getLocation ( ) . toVector ( ) , player . getLocation ( ) . toVector ( ) ) ;
2012-03-28 18:04:59 +00:00
} else {
2014-07-17 07:21:13 +00:00
region = session . getSelection ( world ) ;
}
2012-03-21 06:40:35 +00:00
2014-07-17 07:21:13 +00:00
FlatRegionFunction replace = new BiomeReplace ( editSession , target ) ;
if ( mask2d ! = null ) {
replace = new FlatRegionMaskingFilter ( mask2d , replace ) ;
2012-03-21 06:40:35 +00:00
}
2014-07-17 07:21:13 +00:00
FlatRegionVisitor visitor = new FlatRegionVisitor ( Regions . asFlatRegion ( region ) , replace ) ;
Operations . completeLegacy ( visitor ) ;
player . print ( " Biomes were changed in " + visitor . getAffected ( ) + " columns. You may have to rejoin your game (or close and reopen your world) to see a change. " ) ;
2012-03-21 06:40:35 +00:00
}
2014-06-28 01:04:34 +00:00
2012-03-17 15:35:29 +00:00
}