2019-08-30 18:55:25 +00:00
/ *
* This file is part of Baritone .
*
* Baritone 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 .
*
* Baritone 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 Baritone . If not , see < https : //www.gnu.org/licenses/>.
* /
2019-10-06 20:20:42 +00:00
package baritone.command.defaults ;
2019-08-30 18:55:25 +00:00
2019-12-18 21:19:58 +00:00
import baritone.Baritone ;
2019-09-19 20:30:40 +00:00
import baritone.api.IBaritone ;
2019-10-06 20:20:42 +00:00
import baritone.api.command.Command ;
2020-03-14 18:50:16 +00:00
import baritone.api.command.argument.IArgConsumer ;
2019-10-06 20:20:42 +00:00
import baritone.api.command.datatypes.RelativeBlockPos ;
import baritone.api.command.datatypes.RelativeFile ;
import baritone.api.command.exception.CommandException ;
import baritone.api.command.exception.CommandInvalidStateException ;
2020-03-14 18:50:16 +00:00
import baritone.api.utils.BetterBlockPos ;
2019-09-04 09:30:24 +00:00
import net.minecraft.client.Minecraft ;
2019-12-18 21:19:58 +00:00
import org.apache.commons.io.FilenameUtils ;
2019-08-30 18:55:25 +00:00
2019-09-04 09:30:24 +00:00
import java.io.File ;
2019-09-19 21:38:13 +00:00
import java.util.Arrays ;
2019-08-30 18:55:25 +00:00
import java.util.List ;
import java.util.stream.Stream ;
public class BuildCommand extends Command {
2019-09-19 20:40:46 +00:00
2019-10-01 00:52:47 +00:00
private static final File schematicsDir = new File ( mc . gameDir , " schematics " ) ;
2019-09-04 09:30:24 +00:00
2019-09-19 20:30:40 +00:00
public BuildCommand ( IBaritone baritone ) {
super ( baritone , " build " ) ;
2019-08-30 18:55:25 +00:00
}
@Override
2019-10-04 13:55:02 +00:00
public void execute ( String label , IArgConsumer args ) throws CommandException {
2019-09-26 23:49:26 +00:00
File file = args . getDatatypePost ( RelativeFile . INSTANCE , schematicsDir ) . getAbsoluteFile ( ) ;
2019-12-18 21:19:58 +00:00
if ( FilenameUtils . getExtension ( file . getAbsolutePath ( ) ) . isEmpty ( ) ) {
2020-05-18 01:35:41 +00:00
file = new File ( file . getAbsolutePath ( ) + " . " + Baritone . settings ( ) . schematicFallbackExtension . value ) ;
2019-09-04 09:30:24 +00:00
}
2019-08-30 18:55:25 +00:00
BetterBlockPos origin = ctx . playerFeet ( ) ;
BetterBlockPos buildOrigin ;
2019-09-20 23:32:43 +00:00
if ( args . hasAny ( ) ) {
2019-08-30 18:55:25 +00:00
args . requireMax ( 3 ) ;
2019-09-26 23:49:26 +00:00
buildOrigin = args . getDatatypePost ( RelativeBlockPos . INSTANCE , origin ) ;
2019-08-30 18:55:25 +00:00
} else {
args . requireMax ( 0 ) ;
buildOrigin = origin ;
}
2019-09-04 09:30:24 +00:00
boolean success = baritone . getBuilderProcess ( ) . build ( file . getName ( ) , file , buildOrigin ) ;
2019-08-30 18:55:25 +00:00
if ( ! success ) {
2020-03-14 18:50:16 +00:00
throw new CommandInvalidStateException ( " Couldn't load the schematic. Make sure to use the FULL file name, including the extension (e.g. blah.schematic). " ) ;
2019-08-30 18:55:25 +00:00
}
2019-09-04 09:30:24 +00:00
logDirect ( String . format ( " Successfully loaded schematic for building \ nOrigin: %s " , buildOrigin ) ) ;
2019-08-30 18:55:25 +00:00
}
@Override
2019-10-04 13:55:02 +00:00
public Stream < String > tabComplete ( String label , IArgConsumer args ) throws CommandException {
2019-09-04 09:30:24 +00:00
if ( args . hasExactlyOne ( ) ) {
return RelativeFile . tabComplete ( args , schematicsDir ) ;
} else if ( args . has ( 2 ) ) {
2019-08-30 18:55:25 +00:00
args . get ( ) ;
2019-09-26 23:49:26 +00:00
return args . tabCompleteDatatype ( RelativeBlockPos . INSTANCE ) ;
2019-08-30 18:55:25 +00:00
}
return Stream . empty ( ) ;
}
2019-09-06 10:59:10 +00:00
@Override
public String getShortDesc ( ) {
return " Build a schematic " ;
}
2019-08-30 18:55:25 +00:00
@Override
public List < String > getLongDesc ( ) {
2019-09-19 21:38:13 +00:00
return Arrays . asList (
2019-09-19 19:53:15 +00:00
" Build a schematic from a file. " ,
" " ,
" Usage: " ,
" > build <filename> - Loads and builds '<filename>.schematic' " ,
" > build <filename> <x> <y> <z> - Custom position "
2019-08-30 18:55:25 +00:00
) ;
}
}