package net.minecraft.block;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import it.unimi.dsi.fastutil.objects.Object2ByteLinkedOpenHashMap;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import net.minecraft.block.material.Material;
import net.minecraft.block.material.MaterialColor;
import net.minecraft.block.material.PushReaction;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.item.ExperienceOrbEntity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.fluid.Fluids;
import net.minecraft.fluid.IFluidState;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.item.BlockItem;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.DyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.network.DebugPacketSender;
import net.minecraft.pathfinding.PathType;
import net.minecraft.state.StateContainer;
import net.minecraft.stats.Stats;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.FluidTags;
import net.minecraft.tags.Tag;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.IItemProvider;
import net.minecraft.util.Mirror;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ObjectIntIdentityMap;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Rotation;
import net.minecraft.util.Util;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.shapes.IBooleanFunction;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.shapes.VoxelShapes;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.Explosion;
import net.minecraft.world.GameRules;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IEnviromentBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import net.minecraft.world.storage.loot.LootContext;
import net.minecraft.world.storage.loot.LootParameterSets;
import net.minecraft.world.storage.loot.LootParameters;
import net.minecraft.world.storage.loot.LootTable;
import net.minecraft.world.storage.loot.LootTables;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Block extends net.minecraftforge.registries.ForgeRegistryEntry<Block> implements IItemProvider, net.minecraftforge.common.extensions.IForgeBlock {
protected static final Logger LOGGER = LogManager.getLogger();
@Deprecated //Forge: Do not use, use GameRegistry
public static final ObjectIntIdentityMap<BlockState> BLOCK_STATE_IDS = net.minecraftforge.registries.GameData.getBlockStateIDMap();
private static final Direction[] UPDATE_ORDER = new Direction[]{Direction.WEST, Direction.EAST, Direction.NORTH, Direction.SOUTH, Direction.DOWN, Direction.UP};
private static final LoadingCache<VoxelShape, Boolean> OPAQUE_CACHE = CacheBuilder.newBuilder().maximumSize(512L).weakKeys().build(new CacheLoader<VoxelShape, Boolean>() {
public Boolean load(VoxelShape p_load_1_) {
return !VoxelShapes.compare(VoxelShapes.fullCube(), p_load_1_, IBooleanFunction.NOT_SAME);
}
});
private static final VoxelShape field_220083_b = VoxelShapes.combineAndSimplify(VoxelShapes.fullCube(), makeCuboidShape(2.0D, 0.0D, 2.0D, 14.0D, 16.0D, 14.0D), IBooleanFunction.ONLY_FIRST);
private static final VoxelShape field_220084_c = makeCuboidShape(7.0D, 0.0D, 7.0D, 9.0D, 10.0D, 9.0D);
protected final int lightValue;
protected final float blockHardness;
protected final float blockResistance;
protected final boolean ticksRandomly;
protected final SoundType soundType;
protected final Material material;
protected final MaterialColor materialColor;
private final float slipperiness;
protected final StateContainer<Block, BlockState> stateContainer;
private BlockState defaultState;
protected final boolean blocksMovement;
private final boolean variableOpacity;
@Nullable
private ResourceLocation lootTable;
@Nullable
private String translationKey;
@Nullable
private Item item;
private static final ThreadLocal<Object2ByteLinkedOpenHashMap<Block.RenderSideCacheKey>> SHOULD_SIDE_RENDER_CACHE = ThreadLocal.withInitial(() -> {
Object2ByteLinkedOpenHashMap<Block.RenderSideCacheKey> object2bytelinkedopenhashmap = new Object2ByteLinkedOpenHashMap<Block.RenderSideCacheKey>(200) {
protected void rehash(int p_rehash_1_) {
}
};
object2bytelinkedopenhashmap.defaultReturnValue((byte)127);
return object2bytelinkedopenhashmap;
});
public static int getStateId(@Nullable BlockState state) {
if (state == null) {
return 0;
} else {
int i = BLOCK_STATE_IDS.get(state);
return i == -1 ? 0 : i;
}
}
public static BlockState getStateById(int id) {
BlockState blockstate = BLOCK_STATE_IDS.getByValue(id);
return blockstate == null ? Blocks.AIR.getDefaultState() : blockstate;
}
public static Block getBlockFromItem(@Nullable Item itemIn) {
return itemIn instanceof BlockItem ? ((BlockItem)itemIn).getBlock() : Blocks.AIR;
}
public static BlockState nudgeEntitiesWithNewState(BlockState oldState, BlockState newState, World worldIn, BlockPos pos) {
VoxelShape voxelshape = VoxelShapes.combine(oldState.getCollisionShape(worldIn, pos), newState.getCollisionShape(worldIn, pos), IBooleanFunction.ONLY_SECOND).withOffset((double)pos.getX(), (double)pos.getY(), (double)pos.getZ());
for(Entity entity : worldIn.getEntitiesWithinAABBExcludingEntity((Entity)null, voxelshape.getBoundingBox())) {
double d0 = VoxelShapes.getAllowedOffset(Direction.Axis.Y, entity.getBoundingBox().offset(0.0D, 1.0D, 0.0D), Stream.of(voxelshape), -1.0D);
entity.setPositionAndUpdate(entity.posX, entity.posY + 1.0D + d0, entity.posZ);
}
return newState;
}
public static VoxelShape makeCuboidShape(double x1, double y1, double z1, double x2, double y2, double z2) {
return VoxelShapes.create(x1 / 16.0D, y1 / 16.0D, z1 / 16.0D, x2 / 16.0D, y2 / 16.0D, z2 / 16.0D);
}
@Deprecated
public boolean canEntitySpawn(BlockState state, IBlockReader worldIn, BlockPos pos, EntityType<?> type) {
return state.func_224755_d(worldIn, pos, Direction.UP) && this.lightValue < 14;
}
@Deprecated
public boolean isAir(BlockState state) {
return false;
}
/**
* Amount of light emitted
* @deprecated prefer calling {@link IBlockState#getLightValue()}
*/
@Deprecated
public int getLightValue(BlockState state) {
return this.lightValue;
}
/**
* Get a material of block
* @deprecated call via {@link IBlockState#getMaterial()} whenever possible. Implementing/overriding is fine.
*/
@Deprecated
public Material getMaterial(BlockState state) {
return this.material;
}
/**
* Get the MapColor for this Block and the given BlockState
* @deprecated call via {@link IBlockState#getMapColor(IBlockAccess,BlockPos)} whenever possible.
* Implementing/overriding is fine.
*/
@Deprecated
public MaterialColor getMaterialColor(BlockState state, IBlockReader worldIn, BlockPos pos) {
return this.materialColor;
}
/**
* For all neighbors, have them react to this block's existence, potentially updating their states as needed. For
* example, fences make their connections to this block if possible and observers pulse if this block was placed in
* front of their detector
*/
@Deprecated
public void updateNeighbors(BlockState stateIn, IWorld worldIn, BlockPos pos, int flags) {
try (BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain()) {
for(Direction direction : UPDATE_ORDER) {
blockpos$pooledmutableblockpos.setPos(pos).move(direction);
BlockState blockstate = worldIn.getBlockState(blockpos$pooledmutableblockpos);
BlockState blockstate1 = blockstate.updatePostPlacement(direction.getOpposite(), stateIn, worldIn, blockpos$pooledmutableblockpos, pos);
replaceBlock(blockstate, blockstate1, worldIn, blockpos$pooledmutableblockpos, flags);
}
}
}
public boolean isIn(Tag<Block> tagIn) {
return tagIn.contains(this);
}
/**
* With the provided block state, performs neighbor checks for all neighboring blocks to get an "adjusted" blockstate
* for placement in the world, if the current state is not valid.
*/
public static BlockState getValidBlockForPosition(BlockState currentState, IWorld worldIn, BlockPos pos) {
BlockState blockstate = currentState;
BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos();
for(Direction direction : UPDATE_ORDER) {
blockpos$mutableblockpos.setPos(pos).move(direction);
blockstate = blockstate.updatePostPlacement(direction, worldIn.getBlockState(blockpos$mutableblockpos), worldIn, pos, blockpos$mutableblockpos);
}
return blockstate;
}
/**
* Replaces oldState with newState, possibly playing effects and creating drops. Flags are as in {@link
* World#setBlockState}
*/
public static void replaceBlock(BlockState oldState, BlockState newState, IWorld worldIn, BlockPos pos, int flags) {
if (newState != oldState) {
if (newState.isAir()) {
if (!worldIn.isRemote()) {
worldIn.destroyBlock(pos, (flags & 32) == 0);
}
} else {
worldIn.setBlockState(pos, newState, flags & -33);
}
}
}
/**
* performs updates on diagonal neighbors of the target position and passes in the flags. The flags can be referenced
* from the docs for {@link IWorldWriter#setBlockState(IBlockState, BlockPos, int)}.
*/
@Deprecated
public void updateDiagonalNeighbors(BlockState state, IWorld worldIn, BlockPos pos, int flags) {
}
/**
* Update the provided state given the provided neighbor facing and neighbor state, returning a new state.
* For example, fences make their connections to the passed in state if possible, and wet concrete powder immediately
* returns its solidified counterpart.
* Note that this method should ideally consider only the specific face passed in.
*/
@Deprecated
public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) {
return stateIn;
}
/**
* Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed
* blockstate.
* @deprecated call via {@link IBlockState#withRotation(Rotation)} whenever possible. Implementing/overriding is
* fine.
*/
@Deprecated
public BlockState rotate(BlockState state, Rotation rot) {
return state;
}
/**
* Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed
* blockstate.
* @deprecated call via {@link IBlockState#withMirror(Mirror)} whenever possible. Implementing/overriding is fine.
*/
@Deprecated
public BlockState mirror(BlockState state, Mirror mirrorIn) {
return state;
}
public Block(Block.Properties properties) {
StateContainer.Builder<Block, BlockState> builder = new StateContainer.Builder<>(this);
this.fillStateContainer(builder);
this.material = properties.material;
this.materialColor = properties.mapColor;
this.blocksMovement = properties.blocksMovement;
this.soundType = properties.soundType;
this.lightValue = properties.lightValue;
this.blockResistance = properties.resistance;
this.blockHardness = properties.hardness;
this.ticksRandomly = properties.ticksRandomly;
this.slipperiness = properties.slipperiness;
this.variableOpacity = properties.variableOpacity;
this.lootTable = properties.lootTable;
this.harvestLevel = properties.harvestLevel;
this.harvestTool = properties.harvestTool;
this.stateContainer = builder.create(BlockState::new);
this.setDefaultState(this.stateContainer.getBaseState());
}
/**
* Checks if the provided block is in the hardcoded list of blocks that will not attach to fences/panes/walls
*/
public static boolean cannotAttach(Block blockIn) {
return blockIn instanceof LeavesBlock || blockIn == Blocks.BARRIER || blockIn == Blocks.CARVED_PUMPKIN || blockIn == Blocks.JACK_O_LANTERN || blockIn == Blocks.MELON || blockIn == Blocks.PUMPKIN;
}
@Deprecated
public boolean isNormalCube(BlockState state, IBlockReader worldIn, BlockPos pos) {
return state.getMaterial().isOpaque() && state.func_224756_o(worldIn, pos) && !state.canProvidePower();
}
@Deprecated
public boolean causesSuffocation(BlockState state, IBlockReader worldIn, BlockPos pos) {
return this.material.blocksMovement() && state.func_224756_o(worldIn, pos);
}
/**
* @deprecated call via {@link IBlockState#hasCustomBreakingProgress()} whenever possible. Implementing/overriding is
* fine.
*/
@Deprecated
@OnlyIn(Dist.CLIENT)
public boolean hasCustomBreakingProgress(BlockState state) {
return false;
}
@Deprecated
public boolean allowsMovement(BlockState state, IBlockReader worldIn, BlockPos pos, PathType type) {
switch(type) {
case LAND:
return !state.func_224756_o(worldIn, pos);
case WATER:
return worldIn.getFluidState(pos).isTagged(FluidTags.WATER);
case AIR:
return !state.func_224756_o(worldIn, pos);
default:
return false;
}
}
/**
* The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only,
* LIQUID for vanilla liquids, INVISIBLE to skip all rendering
* @deprecated call via {@link IBlockState#getRenderType()} whenever possible. Implementing/overriding is fine.
*/
@Deprecated
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Deprecated
public boolean isReplaceable(BlockState state, BlockItemUseContext useContext) {
return state.getMaterial().isReplaceable() && (useContext.getItem().isEmpty() || useContext.getItem().getItem() != this.asItem());
}
/**
* @deprecated call via {@link IBlockState#getBlockHardness(World,BlockPos)} whenever possible.
* Implementing/overriding is fine.
*/
@Deprecated
public float getBlockHardness(BlockState blockState, IBlockReader worldIn, BlockPos pos) {
return this.blockHardness;
}
/**
* Returns whether or not this block is of a type that needs random ticking. Called for ref-counting purposes by
* ExtendedBlockStorage in order to broadly cull a chunk from the random chunk update list for efficiency's sake.
*/
public boolean ticksRandomly(BlockState state) {
return this.ticksRandomly;
}
@Deprecated //Forge: New State sensitive version.
public boolean hasTileEntity() {
return hasTileEntity(getDefaultState());
}
@Deprecated
public boolean needsPostProcessing(BlockState state, IBlockReader worldIn, BlockPos pos) {
return false;
}
@Deprecated
@OnlyIn(Dist.CLIENT)
public int getPackedLightmapCoords(BlockState state, IEnviromentBlockReader worldIn, BlockPos pos) {
return worldIn.getCombinedLight(pos, state.getLightValue(worldIn, pos));
}
/**
* ""
*/
@OnlyIn(Dist.CLIENT)
public static boolean shouldSideBeRendered(BlockState adjacentState, IBlockReader blockState, BlockPos blockAccess, Direction pos) {
BlockPos blockpos = blockAccess.offset(pos);
BlockState blockstate = blockState.getBlockState(blockpos);
if (adjacentState.isSideInvisible(blockstate, pos)) {
return false;
} else if (blockstate.isSolid()) {
Block.RenderSideCacheKey block$rendersidecachekey = new Block.RenderSideCacheKey(adjacentState, blockstate, pos);
Object2ByteLinkedOpenHashMap<Block.RenderSideCacheKey> object2bytelinkedopenhashmap = SHOULD_SIDE_RENDER_CACHE.get();
byte b0 = object2bytelinkedopenhashmap.getAndMoveToFirst(block$rendersidecachekey);
if (b0 != 127) {
return b0 != 0;
} else {
VoxelShape voxelshape = adjacentState.func_215702_a(blockState, blockAccess, pos);
VoxelShape voxelshape1 = blockstate.func_215702_a(blockState, blockpos, pos.getOpposite());
boolean flag = VoxelShapes.compare(voxelshape, voxelshape1, IBooleanFunction.ONLY_FIRST);
if (object2bytelinkedopenhashmap.size() == 200) {
object2bytelinkedopenhashmap.removeLastByte();
}
object2bytelinkedopenhashmap.putAndMoveToFirst(block$rendersidecachekey, (byte)(flag ? 1 : 0));
return flag;
}
} else {
return true;
}
}
@Deprecated
public boolean isSolid(BlockState state) {
return this.blocksMovement && this.getRenderLayer() == BlockRenderLayer.SOLID;
}
@Deprecated
@OnlyIn(Dist.CLIENT)
public boolean isSideInvisible(BlockState state, BlockState adjacentBlockState, Direction side) {
return false;
}
@Deprecated
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
return VoxelShapes.fullCube();
}
@Deprecated
public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
return this.blocksMovement ? state.getShape(worldIn, pos) : VoxelShapes.empty();
}
@Deprecated
public VoxelShape getRenderShape(BlockState state, IBlockReader worldIn, BlockPos pos) {
return state.getShape(worldIn, pos);
}
@Deprecated
public VoxelShape getRaytraceShape(BlockState state, IBlockReader worldIn, BlockPos pos) {
return VoxelShapes.empty();
}
public static boolean func_220064_c(IBlockReader worldIn, BlockPos pos) {
BlockState blockstate = worldIn.getBlockState(pos);
return !blockstate.isIn(BlockTags.LEAVES) && !VoxelShapes.compare(blockstate.getCollisionShape(worldIn, pos).project(Direction.UP), field_220083_b, IBooleanFunction.ONLY_SECOND);
}
public static boolean func_220055_a(IWorldReader worldIn, BlockPos pos, Direction directionIn) {
BlockState blockstate = worldIn.getBlockState(pos);
return !blockstate.isIn(BlockTags.LEAVES) && !VoxelShapes.compare(blockstate.getCollisionShape(worldIn, pos).project(directionIn), field_220084_c, IBooleanFunction.ONLY_SECOND);
}
public static boolean hasSolidSide(BlockState state, IBlockReader worldIn, BlockPos pos, Direction side) {
return !state.isIn(BlockTags.LEAVES) && doesSideFillSquare(state.getCollisionShape(worldIn, pos), side);
}
public static boolean doesSideFillSquare(VoxelShape shape, Direction side) {
VoxelShape voxelshape = shape.project(side);
return isOpaque(voxelshape);
}
/**
* Gets whether the provided {@link VoxelShape} is opaque
*/
public static boolean isOpaque(VoxelShape shape) {
return OPAQUE_CACHE.getUnchecked(shape);
}
@Deprecated
public final boolean isOpaqueCube(BlockState state, IBlockReader worldIn, BlockPos pos) {
return state.isSolid() ? isOpaque(state.getRenderShape(worldIn, pos)) : false;
}
public boolean propagatesSkylightDown(BlockState state, IBlockReader reader, BlockPos pos) {
return !isOpaque(state.getShape(reader, pos)) && state.getFluidState().isEmpty();
}
@Deprecated
public int getOpacity(BlockState state, IBlockReader worldIn, BlockPos pos) {
if (state.isOpaqueCube(worldIn, pos)) {
return worldIn.getMaxLightLevel();
} else {
return state.propagatesSkylightDown(worldIn, pos) ? 0 : 1;
}
}
@Deprecated
public boolean func_220074_n(BlockState state) {
return false;
}
@Deprecated
public void randomTick(BlockState state, World worldIn, BlockPos pos, Random random) {
this.tick(state, worldIn, pos, random);
}
@Deprecated
public void tick(BlockState state, World worldIn, BlockPos pos, Random random) {
}
/**
* Called periodically clientside on blocks near the player to show effects (like furnace fire particles). Note that
* this method is unrelated to {@link randomTick} and {@link #needsRandomTick}, and will always be called regardless
* of whether the block can receive random update ticks
*/
@OnlyIn(Dist.CLIENT)
public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) {
}
/**
* Called after a player destroys this Block - the posiiton pos may no longer hold the state indicated.
*/
public void onPlayerDestroy(IWorld worldIn, BlockPos pos, BlockState state) {
}
@Deprecated
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) {
DebugPacketSender.func_218806_a(worldIn, pos);
}
/**
* How many world ticks before ticking
*/
public int tickRate(IWorldReader worldIn) {
return 10;
}
@Nullable
@Deprecated
public INamedContainerProvider getContainer(BlockState state, World worldIn, BlockPos pos) {
return null;
}
@Deprecated
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
}
@Deprecated
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) {
worldIn.removeTileEntity(pos);
}
}
/**
* Get the hardness of this Block relative to the ability of the given player
* @deprecated call via {@link IBlockState#getPlayerRelativeBlockHardness(EntityPlayer,World,BlockPos)} whenever
* possible. Implementing/overriding is fine.
*/
@Deprecated
public float getPlayerRelativeBlockHardness(BlockState state, PlayerEntity player, IBlockReader worldIn, BlockPos pos) {
float f = state.getBlockHardness(worldIn, pos);
if (f == -1.0F) {
return 0.0F;
} else {
int i = net.minecraftforge.common.ForgeHooks.canHarvestBlock(state, player, worldIn, pos) ? 30 : 100;
return player.getDigSpeed(state, pos) / f / (float)i;
}
}
/**
* Perform side-effects from block dropping, such as creating silverfish
*/
@Deprecated
public void spawnAdditionalDrops(BlockState state, World worldIn, BlockPos pos, ItemStack stack) {
}
public ResourceLocation getLootTable() {
if (this.lootTable == null) {
ResourceLocation resourcelocation = Registry.BLOCK.getKey(this);
this.lootTable = new ResourceLocation(resourcelocation.getNamespace(), "blocks/" + resourcelocation.getPath());
}
return this.lootTable;
}
@Deprecated
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
ResourceLocation resourcelocation = this.getLootTable();
if (resourcelocation == LootTables.EMPTY) {
return Collections.emptyList();
} else {
LootContext lootcontext = builder.withParameter(LootParameters.BLOCK_STATE, state).build(LootParameterSets.BLOCK);
ServerWorld serverworld = lootcontext.getWorld();
LootTable loottable = serverworld.getServer().getLootTableManager().getLootTableFromLocation(resourcelocation);
return loottable.generate(lootcontext);
}
}
public static List<ItemStack> getDrops(BlockState state, ServerWorld worldIn, BlockPos pos, @Nullable TileEntity tileEntityIn) {
LootContext.Builder lootcontext$builder = (new LootContext.Builder(worldIn)).withRandom(worldIn.rand).withParameter(LootParameters.POSITION, pos).withParameter(LootParameters.TOOL, ItemStack.EMPTY).withNullableParameter(LootParameters.BLOCK_ENTITY, tileEntityIn);
return state.getDrops(lootcontext$builder);
}
public static List<ItemStack> getDrops(BlockState state, ServerWorld worldIn, BlockPos pos, @Nullable TileEntity tileEntityIn, Entity entityIn, ItemStack stack) {
LootContext.Builder lootcontext$builder = (new LootContext.Builder(worldIn)).withRandom(worldIn.rand).withParameter(LootParameters.POSITION, pos).withParameter(LootParameters.TOOL, stack).withParameter(LootParameters.THIS_ENTITY, entityIn).withNullableParameter(LootParameters.BLOCK_ENTITY, tileEntityIn);
return state.getDrops(lootcontext$builder);
}
public static void spawnDrops(BlockState state, LootContext.Builder builder) {
ServerWorld serverworld = builder.getWorld();
BlockPos blockpos = builder.assertPresent(LootParameters.POSITION);
state.getDrops(builder).forEach((p_220063_2_) -> {
spawnAsEntity(serverworld, blockpos, p_220063_2_);
});
state.spawnAdditionalDrops(serverworld, blockpos, ItemStack.EMPTY);
}
public static void spawnDrops(BlockState state, World worldIn, BlockPos pos) {
if (worldIn instanceof ServerWorld) {
getDrops(state, (ServerWorld)worldIn, pos, (TileEntity)null).forEach((p_220079_2_) -> {
spawnAsEntity(worldIn, pos, p_220079_2_);
});
}
state.spawnAdditionalDrops(worldIn, pos, ItemStack.EMPTY);
}
public static void spawnDrops(BlockState state, World worldIn, BlockPos pos, @Nullable TileEntity tileEntityIn) {
if (worldIn instanceof ServerWorld) {
getDrops(state, (ServerWorld)worldIn, pos, tileEntityIn).forEach((p_220061_2_) -> {
spawnAsEntity(worldIn, pos, p_220061_2_);
});
}
state.spawnAdditionalDrops(worldIn, pos, ItemStack.EMPTY);
}
public static void spawnDrops(BlockState state, World worldIn, BlockPos pos, @Nullable TileEntity tileEntityIn, Entity entityIn, ItemStack stack) {
if (worldIn instanceof ServerWorld) {
getDrops(state, (ServerWorld)worldIn, pos, tileEntityIn, entityIn, stack).forEach((p_220057_2_) -> {
spawnAsEntity(worldIn, pos, p_220057_2_);
});
}
state.spawnAdditionalDrops(worldIn, pos, stack);
}
/**
* Spawns the given ItemStack as an EntityItem into the World at the given position
*/
public static void spawnAsEntity(World worldIn, BlockPos pos, ItemStack stack) {
if (!worldIn.isRemote && !stack.isEmpty() && worldIn.getGameRules().getBoolean(GameRules.DO_TILE_DROPS) && !worldIn.restoringBlockSnapshots) { // do not drop items while restoring blockstates, prevents item dupe
float f = 0.5F;
double d0 = (double)(worldIn.rand.nextFloat() * 0.5F) + 0.25D;
double d1 = (double)(worldIn.rand.nextFloat() * 0.5F) + 0.25D;
double d2 = (double)(worldIn.rand.nextFloat() * 0.5F) + 0.25D;
ItemEntity itementity = new ItemEntity(worldIn, (double)pos.getX() + d0, (double)pos.getY() + d1, (double)pos.getZ() + d2, stack);
itementity.setDefaultPickupDelay();
worldIn.addEntity(itementity);
}
}
/**
* Spawns the given amount of experience into the World as XP orb entities
*/
public void dropXpOnBlockBreak(World worldIn, BlockPos pos, int amount) {
if (!worldIn.isRemote && worldIn.getGameRules().getBoolean(GameRules.DO_TILE_DROPS) && !worldIn.restoringBlockSnapshots) { // do not drop items while restoring blockstates, prevents item dupe
while(amount > 0) {
int i = ExperienceOrbEntity.getXPSplit(amount);
amount -= i;
worldIn.addEntity(new ExperienceOrbEntity(worldIn, (double)pos.getX() + 0.5D, (double)pos.getY() + 0.5D, (double)pos.getZ() + 0.5D, i));
}
}
}
/**
* Returns how much this block can resist explosions from the passed in entity.
*/
@Deprecated //Forge: State sensitive version
public float getExplosionResistance() {
return this.blockResistance;
}
/**
* Called when this Block is destroyed by an Explosion
*/
public void onExplosionDestroy(World worldIn, BlockPos pos, Explosion explosionIn) {
}
/**
* Gets the render layer this block will render on. SOLID for solid blocks, CUTOUT or CUTOUT_MIPPED for on-off
* transparency (glass, reeds), TRANSLUCENT for fully blended transparency (stained glass)
*/
public BlockRenderLayer getRenderLayer() {
return BlockRenderLayer.SOLID;
}
@Deprecated
public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) {
return true;
}
@Deprecated
public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
return false;
}
/**
* Called when the given entity walks on this Block
*/
public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn) {
}
@Nullable
public BlockState getStateForPlacement(BlockItemUseContext context) {
return this.getDefaultState();
}
@Deprecated
public void onBlockClicked(BlockState state, World worldIn, BlockPos pos, PlayerEntity player) {
}
/**
* @deprecated call via {@link IBlockState#getWeakPower(IBlockAccess,BlockPos,EnumFacing)} whenever possible.
* Implementing/overriding is fine.
*/
@Deprecated
public int getWeakPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) {
return 0;
}
/**
* Can this block provide power. Only wire currently seems to have this change based on its state.
* @deprecated call via {@link IBlockState#canProvidePower()} whenever possible. Implementing/overriding is fine.
*/
@Deprecated
public boolean canProvidePower(BlockState state) {
return false;
}
@Deprecated
public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) {
}
/**
* @deprecated call via {@link IBlockState#getStrongPower(IBlockAccess,BlockPos,EnumFacing)} whenever possible.
* Implementing/overriding is fine.
*/
@Deprecated
public int getStrongPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) {
return 0;
}
/**
* Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via
* Block.removedByPlayer
*/
public void harvestBlock(World worldIn, PlayerEntity player, BlockPos pos, BlockState state, @Nullable TileEntity te, ItemStack stack) {
player.addStat(Stats.BLOCK_MINED.get(this));
player.addExhaustion(0.005F);
spawnDrops(state, worldIn, pos, te, player, stack);
}
/**
* Called by ItemBlocks after a block is set in the world, to allow post-place logic
*/
public void onBlockPlacedBy(World worldIn, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) {
}
/**
* Return true if an entity can be spawned inside the block (used to get the player's bed spawn location)
*/
public boolean canSpawnInBlock() {
return !this.material.isSolid() && !this.material.isLiquid();
}
@OnlyIn(Dist.CLIENT)
public ITextComponent getNameTextComponent() {
return new TranslationTextComponent(this.getTranslationKey());
}
/**
* Returns the unlocalized name of the block with "tile." appended to the front.
*/
public String getTranslationKey() {
if (this.translationKey == null) {
this.translationKey = Util.makeTranslationKey("block", Registry.BLOCK.getKey(this));
}
return this.translationKey;
}
/**
* Called on server when World#addBlockEvent is called. If server returns true, then also called on the client. On
* the Server, this may perform additional changes to the world, like pistons replacing the block with an extended
* base. On the client, the update may involve replacing tile entities or effects such as sounds or particles
* @deprecated call via {@link IBlockState#onBlockEventReceived(World,BlockPos,int,int)} whenever possible.
* Implementing/overriding is fine.
*/
@Deprecated
public boolean eventReceived(BlockState state, World worldIn, BlockPos pos, int id, int param) {
return false;
}
/**
* @deprecated call via {@link IBlockState#getMobilityFlag()} whenever possible. Implementing/overriding is fine.
*/
@Deprecated
public PushReaction getPushReaction(BlockState state) {
return this.material.getPushReaction();
}
@Deprecated
@OnlyIn(Dist.CLIENT)
public float func_220080_a(BlockState state, IBlockReader worldIn, BlockPos pos) {
return state.func_224756_o(worldIn, pos) ? 0.2F : 1.0F;
}
/**
* Block's chance to react to a living entity falling on it.
*/
public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance) {
entityIn.fall(fallDistance, 1.0F);
}
/**
* Called when an Entity lands on this Block. This method [I]must[/I] update motionY because the entity will not do that
* on its own
*/
public void onLanded(IBlockReader worldIn, Entity entityIn) {
entityIn.setMotion(entityIn.getMotion().mul(1.0D, 0.0D, 1.0D));
}
@Deprecated // Forge: Use more sensitive version below: getPickBlock
@OnlyIn(Dist.CLIENT)
public ItemStack getItem(IBlockReader worldIn, BlockPos pos, BlockState state) {
return new ItemStack(this);
}
/**
* returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks)
*/
public void fillItemGroup(ItemGroup group, NonNullList<ItemStack> items) {
items.add(new ItemStack(this));
}
@Deprecated
public IFluidState getFluidState(BlockState state) {
return Fluids.EMPTY.getDefaultState();
}
@Deprecated //Forge: Use more sensitive version
public float getSlipperiness() {
return this.slipperiness;
}
/**
* Return a random long to be passed to {@link IBakedModel#getQuads}, used for random model rotations
*/
@Deprecated
@OnlyIn(Dist.CLIENT)
public long getPositionRandom(BlockState state, BlockPos pos) {
return MathHelper.getPositionRandom(pos);
}
public void onProjectileCollision(World worldIn, BlockState state, BlockRayTraceResult hit, Entity projectile) {
}
/**
* Called before the Block is set to air in the world. Called regardless of if the player's tool can actually collect
* this block
*/
public void onBlockHarvested(World worldIn, BlockPos pos, BlockState state, PlayerEntity player) {
worldIn.playEvent(player, 2001, pos, getStateId(state));
}
/**
* Called similar to random ticks, but only when it is raining.
*/
public void fillWithRain(World worldIn, BlockPos pos) {
}
/**
* Return whether this block can drop from an explosion.
*/
@Deprecated //Forge: Use more sensitive version
public boolean canDropFromExplosion(Explosion explosionIn) {
return true;
}
/**
* @deprecated call via {@link IBlockState#hasComparatorInputOverride()} whenever possible. Implementing/overriding
* is fine.
*/
@Deprecated
public boolean hasComparatorInputOverride(BlockState state) {
return false;
}
/**
* @deprecated call via {@link IBlockState#getComparatorInputOverride(World,BlockPos)} whenever possible.
* Implementing/overriding is fine.
*/
@Deprecated
public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
return 0;
}
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
}
public StateContainer<Block, BlockState> getStateContainer() {
return this.stateContainer;
}
protected final void setDefaultState(BlockState state) {
this.defaultState = state;
}
/**
* Gets the default state for this block
*/
public final BlockState getDefaultState() {
return this.defaultState;
}
/**
* Get the OffsetType for this Block. Determines if the model is rendered slightly offset.
*/
public Block.OffsetType getOffsetType() {
return Block.OffsetType.NONE;
}
/**
* @deprecated call via {@link IBlockState#getOffset(IBlockAccess,BlockPos)} whenever possible.
* Implementing/overriding is fine.
*/
@Deprecated
public Vec3d getOffset(BlockState state, IBlockReader worldIn, BlockPos pos) {
Block.OffsetType block$offsettype = this.getOffsetType();
if (block$offsettype == Block.OffsetType.NONE) {
return Vec3d.ZERO;
} else {
long i = MathHelper.getCoordinateRandom(pos.getX(), 0, pos.getZ());
return new Vec3d(((double)((float)(i & 15L) / 15.0F) - 0.5D) * 0.5D, block$offsettype == Block.OffsetType.XYZ ? ((double)((float)(i >> 4 & 15L) / 15.0F) - 1.0D) * 0.2D : 0.0D, ((double)((float)(i >> 8 & 15L) / 15.0F) - 0.5D) * 0.5D);
}
}
@Deprecated //Forge: Use more sensitive version {@link IForgeBlockState#getSoundType(IWorldReader, BlockPos, Entity) }
public SoundType getSoundType(BlockState state) {
return this.soundType;
}
public Item asItem() {
if (this.item == null) {
this.item = Item.getItemFromBlock(this);
}
return this.item;
}
public boolean isVariableOpacity() {
return this.variableOpacity;
}
public String toString() {
return "Block{" + Registry.BLOCK.getKey(this) + "}";
}
@OnlyIn(Dist.CLIENT)
public void addInformation(ItemStack stack, @Nullable IBlockReader worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
}
public static boolean isRock(Block blockIn) {
return net.minecraftforge.common.Tags.Blocks.STONE.contains(blockIn);
}
public static boolean isDirt(Block blockIn) {
return net.minecraftforge.common.Tags.Blocks.DIRT.contains(blockIn);
}
/* ======================================== FORGE START =====================================*/
protected Random RANDOM = new Random();
private net.minecraftforge.common.ToolType harvestTool;
private int harvestLevel;
private final net.minecraftforge.common.util.ReverseTagWrapper<Block> reverseTags = new net.minecraftforge.common.util.ReverseTagWrapper<>(this, BlockTags::getGeneration, BlockTags::getCollection);
@Override
public float getSlipperiness(BlockState state, IWorldReader world, BlockPos pos, @Nullable Entity entity) {
return this.slipperiness;
}
@Nullable
@Override
public net.minecraftforge.common.ToolType getHarvestTool(BlockState state) {
return harvestTool; //TODO: RE-Evaluate
}
@Override
public int getHarvestLevel(BlockState state) {
return harvestLevel; //TODO: RE-Evaluate
}
@Override
public boolean canSustainPlant(BlockState state, IBlockReader world, BlockPos pos, Direction facing, net.minecraftforge.common.IPlantable plantable) {
BlockState plant = plantable.getPlant(world, pos.offset(facing));
net.minecraftforge.common.PlantType type = plantable.getPlantType(world, pos.offset(facing));
if (plant.getBlock() == Blocks.CACTUS)
return this.getBlock() == Blocks.CACTUS || this.getBlock() == Blocks.SAND || this.getBlock() == Blocks.RED_SAND;
if (plant.getBlock() == Blocks.SUGAR_CANE && this == Blocks.SUGAR_CANE)
return true;
if (plantable instanceof BushBlock && ((BushBlock)plantable).isValidGround(state, world, pos))
return true;
switch (type) {
case Desert: return this.getBlock() == Blocks.SAND || this.getBlock() == Blocks.TERRACOTTA || this.getBlock() instanceof GlazedTerracottaBlock;
case Nether: return this.getBlock() == Blocks.SOUL_SAND;
case Crop: return this.getBlock() == Blocks.FARMLAND;
case Cave: return Block.hasSolidSide(state, world, pos, Direction.UP);
case Plains: return this.getBlock() == Blocks.GRASS_BLOCK || Block.isDirt(this) || this.getBlock() == Blocks.FARMLAND;
case Water: return state.getMaterial() == Material.WATER; //&& state.getValue(BlockLiquidWrapper)
case Beach:
boolean isBeach = this.getBlock() == Blocks.GRASS_BLOCK || Block.isDirt(this) || this.getBlock() == Blocks.SAND;
boolean hasWater = (world.getBlockState(pos.east()).getMaterial() == Material.WATER ||
world.getBlockState(pos.west()).getMaterial() == Material.WATER ||
world.getBlockState(pos.north()).getMaterial() == Material.WATER ||
world.getBlockState(pos.south()).getMaterial() == Material.WATER);
return isBeach && hasWater;
}
return false;
}
@Override
public final java.util.Set<ResourceLocation> getTags() {
return reverseTags.getTagNames();
}
static {
net.minecraftforge.common.ForgeHooks.setBlockToolSetter((block, tool, level) -> {
block.harvestTool = tool;
block.harvestLevel = level;
});
}
/* ========================================= FORGE END ======================================*/
public static enum OffsetType {
NONE,
XZ,
XYZ;
}
public static class Properties {
private Material material;
private MaterialColor mapColor;
private boolean blocksMovement = true;
private SoundType soundType = SoundType.STONE;
private int lightValue;
private float resistance;
private float hardness;
private boolean ticksRandomly;
private float slipperiness = 0.6F;
/** Sets loot table information */
private ResourceLocation lootTable;
private boolean variableOpacity;
private int harvestLevel = -1;
private net.minecraftforge.common.ToolType harvestTool;
private Properties(Material materialIn, MaterialColor mapColorIn) {
this.material = materialIn;
this.mapColor = mapColorIn;
}
public static Block.Properties create(Material materialIn) {
return create(materialIn, materialIn.getColor());
}
public static Block.Properties create(Material materialIn, DyeColor color) {
return create(materialIn, color.getMapColor());
}
public static Block.Properties create(Material materialIn, MaterialColor mapColorIn) {
return new Block.Properties(materialIn, mapColorIn);
}
public static Block.Properties from(Block blockIn) {
Block.Properties block$properties = new Block.Properties(blockIn.material, blockIn.materialColor);
block$properties.material = blockIn.material;
block$properties.hardness = blockIn.blockHardness;
block$properties.resistance = blockIn.blockResistance;
block$properties.blocksMovement = blockIn.blocksMovement;
block$properties.ticksRandomly = blockIn.ticksRandomly;
block$properties.lightValue = blockIn.lightValue;
block$properties.mapColor = blockIn.materialColor;
block$properties.soundType = blockIn.soundType;
block$properties.slipperiness = blockIn.getSlipperiness();
block$properties.variableOpacity = blockIn.variableOpacity;
block$properties.harvestLevel = blockIn.harvestLevel;
block$properties.harvestTool = blockIn.harvestTool;
return block$properties;
}
public Block.Properties doesNotBlockMovement() {
this.blocksMovement = false;
return this;
}
public Block.Properties slipperiness(float slipperinessIn) {
this.slipperiness = slipperinessIn;
return this;
}
public Block.Properties sound(SoundType soundTypeIn) {
this.soundType = soundTypeIn;
return this;
}
public Block.Properties lightValue(int lightValueIn) {
this.lightValue = lightValueIn;
return this;
}
public Block.Properties hardnessAndResistance(float hardnessIn, float resistanceIn) {
this.hardness = hardnessIn;
this.resistance = Math.max(0.0F, resistanceIn);
return this;
}
protected Block.Properties zeroHardnessAndResistance() {
return this.hardnessAndResistance(0.0F);
}
public Block.Properties hardnessAndResistance(float hardnessAndResistance) {
this.hardnessAndResistance(hardnessAndResistance, hardnessAndResistance);
return this;
}
public Block.Properties tickRandomly() {
this.ticksRandomly = true;
return this;
}
public Block.Properties variableOpacity() {
this.variableOpacity = true;
return this;
}
public Block.Properties harvestLevel(int harvestLevel) {
this.harvestLevel = harvestLevel;
return this;
}
public Block.Properties harvestTool(net.minecraftforge.common.ToolType harvestTool) {
this.harvestTool = harvestTool;
return this;
}
public Block.Properties noDrops() {
this.lootTable = LootTables.EMPTY;
return this;
}
public Block.Properties lootFrom(Block blockIn) {
this.lootTable = blockIn.getLootTable();
return this;
}
}
public static final class RenderSideCacheKey {
private final BlockState state;
private final BlockState adjacentState;
private final Direction side;
public RenderSideCacheKey(BlockState state, BlockState adjacentState, Direction side) {
this.state = state;
this.adjacentState = adjacentState;
this.side = side;
}
public boolean equals(Object p_equals_1_) {
if (this == p_equals_1_) {
return true;
} else if (!(p_equals_1_ instanceof Block.RenderSideCacheKey)) {
return false;
} else {
Block.RenderSideCacheKey block$rendersidecachekey = (Block.RenderSideCacheKey)p_equals_1_;
return this.state == block$rendersidecachekey.state && this.adjacentState == block$rendersidecachekey.adjacentState && this.side == block$rendersidecachekey.side;
}
}
public int hashCode() {
int i = this.state.hashCode();
i = 31 * i + this.adjacentState.hashCode();
i = 31 * i + this.side.hashCode();
return i;
}
}
}
Описание:
В WorldEdit регион выделяется с помощью обозначения точек кубоида.
Кубоид — это параллелепипед.
Существует 3 варианта выделения кубоида:
- Встаем на точку 1 и пишем в чате //pos1, встаем на точку 2 и пишем //pos2.
- Наводим прицел на точку 1 и пишем в чате //hpos1, соответственно наводим прицел на точку 2 и пишем //hpos2.
- Берем деревянный топор в руки (если нет, то пишем команду //wand), жмем левой кнопкой мыши на точку 1 и правой кнопкой мыши на точку 2.
Действия с регионами
//replace — заменить на . Пример: //replace dirt glass — заменить землю на стекло в выбранном кубоиде.
//overlay %,%, … — покрыть % кубоида блоком и % кубоида блоком . Пример: //overlay 5%torch,95%air — покрыть 5% кубоида факелами.
//set — заполнить весь кубоид блоком . Пример: //set 0 — удалить все блоки в кубоиде(заполнить воздухом).
//move — сдвинуть кубоид на блоков в направлении и замнив оставшиеся блоки на .
//walls — создать стены из вокруг кубоида.
//sphere [raised?] — создать сферу из c радиусом . Raised может принимать значения yes и no, если yes, то центр сферы сместится вниз на его радиус.
//hsphere [raised?] — создать полую сферу из c радиусом . Raised может принимать значения yes и no, если yes, то центр сферы сместится вниз на его радиус.
//cyl — создать цилиндр из с радиусом и высотой [height].
//hcyl — создать полый цилиндр из с радиусом и высотой [height].
/forestgen — создать лес площадью x блоков с типом и плотностью , плотность варьируется от 0 до 100. Типы деревьев
Полный список команд (в состоянии перевода)
//limit — максимальное количество блоков используемое при командах. Действует только на вас. Используется для предотвращения катастрофических инцидентов.
Действия с историей
//undo [num-steps] — отменяет последнюю вашу команду. [num-steps] — число отмены последних команд.
//redo [num-steps] — возвращает отмененные вами команды. [num-steps] — число возвращения команд отмененных вами.
/clearhistory — отчищает историю.
Выделение
//wand — дает вам деревянный топор (топор редактирования). ЛКМ по блоку деревянным топором назначает первую позицию, ПКМ по блоку назначает вторую позицию.
/toggleeditwand — отключает деревянный топор. Теперь им можно пользоваться по прямому назначению.
//sel — выбор формы выделяемого региона. cuboid — выделяет куб. poly — выделяет только в плоскости.
//pos1 — назначает первой позицией для выделения блок на котором вы стоите.
//pos2 — назначает второй позицией для выделения блок на котором вы стоите.
//hpos1 — назначает первой позицией для выделения блок на который вы смотрите.
//hpos2 — назначает второй позицией для выделения блок на который вы смотрите.
//chunk — выделяет весь чанк на котором вы находитесь.
//expand — расширяет выбранный вами регион на amount блоков в направлении, в которое вы смотрите.
//expand — расширяет выбранный вами регион на amount блоков в направлении direction (north, east, south, west, up, down)
//expand [direction] — расширяет выбранный вами регион в двух направлениях. amount количество блоков расширения в первом направлении, reverse-amount — количество блоков расширения во втором направлении направлении, direction (north, east, south, west, up, down). Например: //expand 10 7 south — расширит выбранный регион на 10 блоков к югу (south) и на 7 блоков к северу (north).
//expand vert — максимально расширит выбранный вами регион вверх и вниз.
//contract — уменьшает выбранный вами регион на amount блоков в направлении, в которое вы смотрите.
//contract — уменьшает выбранный вами регион на amount блоков в направлении direction (north, east, south, west, up, down)
//contract [direction] — уменьшает выбранный вами регион в двух направлениях. amount количество блоков уменьшения в первом направлении, reverse-amount — количество блоков уменьшения во втором направлении направлении, direction (north, east, south, west, up, down). Например: //contract 10 7 south — уменьшит выбранный регион на 10 блоков к югу (south) и на 7 блоков к северу (north).
//outset [-hv] — Outset the selection in every direction.
//inset [-hv] — Inset the selection in every direction.
//shift [direction] — перемещает регион выбора. Не перемещает содержимое региона. amount — расстояние, direction (north, east, south, west, up, down).
//size — введите что-бы узнать размер выбранного региона.
//count — введите что бы узнать сколько блоков чего либо (block) находится в выбранном регионе.
//distr — введите для получения списка блоков находящихся в выбранном регионе.
Операции с регионами
//set — заполнить выбранный регион определенным блоком (block>).
//replace — заменить все блоки в выбранном регионе определенным блоком (to-block).
//replace — заменить определенные блоки (from-block) другими определенными блоками (to-block) в выбранном регионе.
//overlay — покрыть выбранный регион определенным блоком. Например: //overlay 50 — покрыть выбранный регион факелами.
//walls — создать стены вокруг выбранного региона определенным блоком.
//outline — создает стены, пол, потолок вокруг выбранного региона.
//smooth [iterations] — сглаживает (делает реалистичнее) выбранный регион. iterations — интенсивность.
//regen — востанавливает выбранный регион. Заново его генерирует.
//move [count] [direction] [leave-id] — передвинуть содержимое выбранного региона на count блоков в направлении direction (north, east, south, west, up, down). И заменить освубожденную область определенным блоком (leave-id).
//stack [count] [direction] — продлить выбранный регион на count блоков в направлении direction (north, east, south, west, up, down).
Буфер
//copy — скопировать выбранный регион.
//cut — вырезать выбранный регион.
//paste — вставить скопированный регион.
//rotate — повернуть скопированный регион в буфере обмена в направлении angle-in-degrees.
//flip [dir] — отразить регион в буфере.
//load — загрузить файлы буфера.
//save — сохранить файлы буфера под именем filename.
/clearclipboard — отчистить буфер.
Создание
//hcyl [height] — создание полого (только стены), вертикального цилиндра из блока block, радиусом radius, и высотой height.
//cyl [height] — создание вертикального цилиндра из блока block, радиусом radius, и высотой height.
//sphere — создание сферы из блока block и радиусом radius.
//hsphere — создание полой (пустой) сферы из блока block и радиусом radius.
/forestgen [size] [type] [density] — создание леса размером size, типом type (Типы деревьев) и плотностью density.
/pumpkins [size] — создание тыкв.
Утилиты
/toggleplace — переключение между первой позицией и вашим текущим положением.
//fill [depth] — заполнить отверстия блоком block, в радиусе radius и в глубину depth.
//fill — рекурсивно заполнить отверстия блоком block, в радиусе radius.
//drain — осушить бассейны воды/лавы в радиусе radius.
/fixwater — уровень близлежащих водоемов.
/fixlava — уровень близлежащих бассейнов лавы.
/removeabove [size] [height] — убрать блоки над вашей головой.
/removebelow [size] [height]- убрать блоки под вашими ногами.
/replacenear — заменить блоки на расстоянии size, заменить блоки from-id на блоки to-id.
/removenear [block] [size] — удалить блоки block на расстоянии size.
/snow — покрыть все снегом в радиусе radius.
/thaw — убрать снег в радиусе radius.
/ex [size] — потушить огонь на расстоянии size.
/butcher [radius] — убить всех мобов в радиусе radius.
CraftScripts
В WorldEdit имеется 4 скрипта,вот их описание:
maze.js <блок> [ширина] [высота] — Создает лабиринт.
draw.js <название-файла.формат> [v] — Генерирует рисунки в игре из шерсти,рисунок запилить сюда: папка сервера/drawings/. Не загружайте большие файлы, если скрипт будет обрабатывать файл больше трех секунд, то команда даст отмену!
quickshot.js <нота1> [нота2] … — Делает базовую настройку нотных блоков с указанием ноты. Пример: quickshot.js 1a# 1c 2f
roof.js — Строит пирамиду на месте выбранной позиции. (Пирамида пустая, это можно использовать для постройки подводной базы)
Запуск скриптов
/cs <скрипт>.js [параметры]
History Control
Types | Parameters | Description |
---|---|---|
//undo | [#s of step] [Player name] | Undo the number of Worldedit commands used from self or other player. This restores the past stage. |
//redo | [#s of step] [Player name] | Redo the number of //undo used from self or other player. |
/clearhistory | Clear all available //redo(s) and //undo(s). |
Region Selection
Types | Parameters | Description |
---|---|---|
Wand | Left-click as pos1.
Right-click as pos2 |
A default wand that is used to select an imaginary region. It can be optimized with the command «//sel <style>» for further selection styles. The item minecraft:wooden_axe is currently set as default. |
//wand | Summons the selection wand to your hand. | |
/toggleeditwand | Either disable or enable the Worldedit functionality of the Worldedit wand (The Minecraft Wooden Axe is set as the default wand). | |
//sel | [-d] <cuboid> <extend> <poly> <ellipsoid> <sphere> <cyl> <convex> |
Change the current selection style to a specific one. //sel cuboid is set as default. |
//desel | Deselect the current region selection. | |
//pos1 | Select the player’s bottom half as position 1. | |
//pos2 | Select the player’s bottom half as the position 2. | |
//hpos1 | Select the block you are looking at as position 1. | |
//hpos2 | Select the block you are looking at as position 2. | |
//chunk | Select the 16 x 16 x 256 block-area-wide chunk as a region selection. | |
//expand | <amount> (<reverse-amount>) [direction] |
Expand or grow the region selection based on the player’s facing or map direction. It can also be expanded to the opposite side with <reverse-amount> at the same time. |
//contract | <amount> (<reverse-amount>) [direction] |
Contract or withdraw the region selection based on the player’s facing or map direction. It can also be contracted from the opposite side with <reverse-amount> at the same time. |
//outset | [-hv] <amount> | Expand the region selection based on the amount to all side: Up, Down, North, South, East, West. |
//inset | [-hv] <amount> | Contract the region selection based on the amount from all sides: Up, Down, North, South, East, West. |
//count | [-d] <block> | Count the number of blocks based on which type. |
//distr | [-cd] | Count the percent (%) of each block type presented in the region. |
Region Operation
Types | Parameters | Description |
---|---|---|
//set | <pattern> | Set all blocks from the region to a pattern. |
//replace | (<from-block-ID(s)>) <to-pattern> |
Replace a (or many, or all) block type(s) in region to a pattern. |
//overlay | <pattern> | Overlay the region with a pattern. Pattern is distributed evenly on the highest vertical points of the region. |
//walls | <pattern> | Build the walls around the outer edges of region. The walls’ height are equal to the maximum height of the region selection. |
//outline | <pattern> | Cover every outer part of region with a pattern. |
//center | <pattern> | Create a pattern block(s) at the exact center of the region. Varying from 1×1 to 2×1 to 2×2. |
//smooth | <amount of repetition> | Smooth out the region with an amount of repetition. Creating an even distribution of blocks from highest to lowest point. |
//deform | <expression> | Change the blocks’ position from the region to a specific set point. |
//regen | Put the region back to its earliest seed-generated form. | |
//hollow | [thickness] <block-ID(s)> |
Change the inner block type(s) of region to air based on setting the outer layer’s thickness. |
//move | [distance amount] ([direction]) |
Move every blocks in the region to a direction or based on player’s facing. |
//stack | //stack [-abers] [count] [offset] [-m <mask>]
|
Duplicate the contents of the selection in a given direction x times. |
//naturalize | Change all stone, grass_blocks, and dirt in the region to:
— 1 layer of grass on top — 3 layers of dirt underneath — The rest are stones underneath |
|
//line | ([-h]) <pattern> <size> |
Draw a line between pos1 and pos2 based on pattern and size. |
//curve | ([-h]) <pattern> <size> |
Draw a line based on the ordered multiple set points of «//sel convex». |
//forest | [forest-type] [density] |
Generate a forest type over the grass blocks within the region selection. Density is how the trees are spaced. Flora not included. |
//flora | [density] | Overlay the grass blocks with flowers and grasses. Density is how much they clump in one spot. |
Clipboards and Schematics
Types | Parameters | Description |
---|---|---|
//copy | [-e] [-m] |
Copy the selected region blocks to an imaginary clipboard. It also stores the player’s position where it is copied. |
//cut | [-e] [-m] |
Clear the region blocks and put it in an imaginary clipboard. It also stores the player’s position where it is cut. |
//paste | [-a] [-s] [-o] |
Pastes the region from clipboard based from the player’s position where it is cut or copied last time.
[-a] pastes the selection without air blocks. |
//rotate | [y-axis] [<x-axis>][<z-axis>] |
Rotate the imaginary clipboard based on player’s position when it is cut or copied last time. |
//flip | [direction] | Flip the clipboard like a mirror based on where the player is facing and positioning. |
//schematic (//schem) | [save] [delete] [load] [list] [formats] |
|
save (<format>) <filename> |
Save a schematic to file. | |
delete <filename> |
Remove a schematic from the list. | |
load <filename> |
Load a schematic from the list to the clipboard. | |
list [-dn] [-p <page#>] |
List available schematics from the list’s page number. | |
formats | Display all available schematic formats. | |
/clearclipboard | Clear the current clipboard |
Generation
Types | Parameters | Description |
---|---|---|
//generate | [-hroc] <pattern> <expression> |
Generate a regional shape of blocks based on given expression like geometrical values or mathematical equations. |
//generatebiome | [-hroc] <pattern> <expression> |
Generate a regional biome based on a particular expression |
//hcyl | <pattern> <radius>(,<radius> [height]) |
Create a hollow vertical cylinder around player’s feet based on radius and height. |
//cyl | <pattern> <radius>(,<y radius> [height]) |
Create a vertical cylinder around player’s feet based on radius and height. |
//sphere | <pattern> <radius>(,<radius>,<radius>) [raised? true/false] |
Create a sphere based on x,y,z, radius set around player’s feet. |
//hsphere | <pattern> <radius>(,<radius>,<radius>) [raised? true/false] |
Create a hollow sphere based on x,y,z, radius set around player’s feet. |
//pyramid | <pattern> <size> |
Create a pyramid based on height and size. |
//hpyramid | <pattern> <size> |
Create a hollow pyramid based on height and size. |
/forestgen | [size] [type] [density] |
Generate a forest type based on size and density. |
/pumpkins | [size] | Generates a pumpkin patch based on the size. |
Utilities
Types | Parameters | Description |
---|---|---|
/toggleplace | Toggle whether utility actions will affect surrounding the player or the regional selection. | |
//fill | <pattern> <radius> [depth] |
Fill particular blocks around the player’s feet with the cylinder’s radius and bottom sphere’s depth. |
//fillr | <pattern> <radius> [depth] |
Fill particular blocks around the player’s feet with cylinder’s radius and bottom sphere’s depth recursively. |
//drain | <radius> | Drain lava and water bodies that touches the player’s feet based on radius. |
//fixwater | <radius> | Extend and level nearby water and change flowing water to block state of water. |
//fixlava | <radius> | Extend and level nearby lava and change flowing lava to block state of lava. |
/removeabove | [size] [height] |
Remove blocks above your head or the regional selection with upper air cone style. |
/removebelow | [size] [height] |
Remove blocks below your feet or the regional selection with down-side air cone style. |
/replacenear | [-f] <size> <from-block-ID(s)> <to-pattern> |
Replace all block(s) nearby to pattern. |
/removenear | <block> <size> |
Remove particular block(s) nearby with air sphere style. |
/snow | [radius] | Cover blocks nearby with snow layers and change water to ice. |
/thaw | [radius] | Remove nearby snow layers and change nearby ice to water. |
/ex | [radius] | Remove fire nearby. |
/butcher | [-plangbtfr] [radius] |
Terminate nearby mobs. |
/remove | <type> <radius> |
Remove nearby particular entities: Dropped items, arrows, boats, minecarts, activating TNT, and XP particles. |
/green | [-f] [radius] |
‘Green’ nearby dirt blocks. |
//calc | <expression> | Calculate a mathematical expression |
Chunk Tools
Types | Parameters | Description |
---|---|---|
/chunkinfo | ||
/listchunks | See the loaded chunks. | |
/delchunks | Delete chunk the player is in. |
Superpickaxe Tools
Types | Parameters | Description |
---|---|---|
// | Toggle superpickaxe mode. | |
/sp single | Change to superpickaxe mode that affects single blocks. | |
/sp area | <range> | Change to superpickaxe mode that affects area of blocks. |
/sp recur | <range> | Change to superpickaxe mode that affects area of blocks recursively. |
General Tools
Types | Parameters | Description |
---|---|---|
/tool | <repl> <cycler> <floodfill> <brush> <lrbuild> <tree> <deltree> <farwand> <info> <none> |
Choose a particular tool type to bind to item on hand. |
/none | Remove the command that is binded to the holding tool. | |
/farwand | Enable wand to select point from faraway. | |
/lrbuild | <leftclick block> <rightclick block> |
Long range building too. |
/tree | <tree type> | Tree tool that is used on grass blocks to sprout trees. |
/deltree | Tool to remove floating tree. | |
/repl | <pattern> | Block replacing tool, change that block type on use. |
/cycler | Block data cycler tool | |
/flood | <pattern> <range> |
Flood fill tool |
Brushes
Types | Parameters | Description |
---|---|---|
/brush sphere | [-h] <pattern> [radius] |
Bind sphere brush to holding item that creates sphere when right-clicked on blocks from afar. |
/brush cylinder | [-h] <pattern> [radius] ([height]) |
Bind cylinder brush to holding item that creates cylinder when right-clicked on blocks from afar. |
/brush clipboard | [-ap] | Bind sphere brush to holding item that pastes clipboard when right-clicked on blocks from afar. |
/brush gravity | [-h] [radius] |
Bind gravity brush to holding item that pushes the floating blocks down if there is hollow underneath when right-clicked. |
/brush butcher | [-plangbtfr] [radius] |
Bind butcher brush to holding item that terminates entities and mobs when right-clicked on them. |
/size | [radius] | Change the brush size of current holding brush item. |
/mat | <to-pattern> | Replace the current pattern being used by current brush to a new pattern set. |
/range | <range> | Set the current brush range. |
/mask | Clear the current mask set. | |
/mask | <mask> | Set mask rule to the current holding brush item so it can only affect a particular block type(s) or expression. |
//gmask | <mask> | Set mask rule for every brush. |
Quick-Travel
Types | Parameters | Description |
---|---|---|
/unstuck | Eject the player out to the free spot if the player is suffocated in blocks. | |
/ascend | [levels] | Teleport to the upper floor platform. |
/descend | [levels] | Teleport below the floor platform. |
/thru | Teleport through blocking obstacles. | |
/jumpto | Teleport to the targeted block that the player is looking at. | |
/up | [-fg] [distance] | Teleport to upper distance based on distance amount. |
Snapshots
Types | Parameters | Description |
---|---|---|
//restore | [snapshot] | Restore a particular snapshot if it is already backed up. |
/snapshot use | <snapshot> | Use a particular snapshot. |
/snapshot sel | <index> | Choose a snapshot from the //snapshot list. |
/snapshot list | [#] | List 5 latest recent snapshot. |
/snapshot before | <date> | Find the first snapshot before that date. |
/snapshot after | <<date> | Find the first snapshot after that date. |
Java Scriptings
Types | Parameters | Description |
---|---|---|
//cs | <script> [args…] |
Executes a script. |
/.s | [args…] | Re-executes last script with new arguments |
/<script>.js | [args…] | Executes a JS script. |
Biomes
Types | Parameters | Description |
---|---|---|
/biomelist | [page #] | Bring a list of available biome types. |
/biomeinfo | [-pt] | Get the biome of the targeted block. |
//setbiome | [-p] <biometype>> |
Set the biome type from the selected region.
[-p] to change the block column the player is standing in. |
History Control
Types | Parameters | Description |
---|---|---|
//undo | [#s of step] [Player name] | Undo the number of Worldedit commands used from self or other player. This restores the past stage. |
//redo | [#s of step] [Player name] | Redo the number of //undo used from self or other player. |
/clearhistory | Clear all available //redo(s) and //undo(s). |
Region Selection
Types | Parameters | Description |
---|---|---|
Wand | Left-click as pos1.
Right-click as pos2 |
A default wand that is used to select an imaginary region. It can be optimized with the command «//sel <style>» for further selection styles. The item minecraft:wooden_axe is currently set as default. |
//wand | Summons the selection wand to your hand. | |
/toggleeditwand | Either disable or enable the Worldedit functionality of the Worldedit wand (The Minecraft Wooden Axe is set as the default wand). | |
//sel | [-d] <cuboid> <extend> <poly> <ellipsoid> <sphere> <cyl> <convex> |
Change the current selection style to a specific one. //sel cuboid is set as default. |
//desel | Deselect the current region selection. | |
//pos1 | Select the player’s bottom half as position 1. | |
//pos2 | Select the player’s bottom half as the position 2. | |
//hpos1 | Select the block you are looking at as position 1. | |
//hpos2 | Select the block you are looking at as position 2. | |
//chunk | Select the 16 x 16 x 256 block-area-wide chunk as a region selection. | |
//expand | <amount> (<reverse-amount>) [direction] |
Expand or grow the region selection based on the player’s facing or map direction. It can also be expanded to the opposite side with <reverse-amount> at the same time. |
//contract | <amount> (<reverse-amount>) [direction] |
Contract or withdraw the region selection based on the player’s facing or map direction. It can also be contracted from the opposite side with <reverse-amount> at the same time. |
//outset | [-hv] <amount> | Expand the region selection based on the amount to all side: Up, Down, North, South, East, West. |
//inset | [-hv] <amount> | Contract the region selection based on the amount from all sides: Up, Down, North, South, East, West. |
//count | [-d] <block> | Count the number of blocks based on which type. |
//distr | [-cd] | Count the percent (%) of each block type presented in the region. |
Region Operation
Types | Parameters | Description |
---|---|---|
//set | <pattern> | Set all blocks from the region to a pattern. |
//replace | (<from-block-ID(s)>) <to-pattern> |
Replace a (or many, or all) block type(s) in region to a pattern. |
//overlay | <pattern> | Overlay the region with a pattern. Pattern is distributed evenly on the highest vertical points of the region. |
//walls | <pattern> | Build the walls around the outer edges of region. The walls’ height are equal to the maximum height of the region selection. |
//outline | <pattern> | Cover every outer part of region with a pattern. |
//center | <pattern> | Create a pattern block(s) at the exact center of the region. Varying from 1×1 to 2×1 to 2×2. |
//smooth | <amount of repetition> | Smooth out the region with an amount of repetition. Creating an even distribution of blocks from highest to lowest point. |
//deform | <expression> | Change the blocks’ position from the region to a specific set point. |
//regen | Put the region back to its earliest seed-generated form. | |
//hollow | [thickness] <block-ID(s)> |
Change the inner block type(s) of region to air based on setting the outer layer’s thickness. |
//move | [distance amount] ([direction]) |
Move every blocks in the region to a direction or based on player’s facing. |
//stack | //stack [-abers] [count] [offset] [-m <mask>]
|
Duplicate the contents of the selection in a given direction x times. |
//naturalize | Change all stone, grass_blocks, and dirt in the region to:
— 1 layer of grass on top — 3 layers of dirt underneath — The rest are stones underneath |
|
//line | ([-h]) <pattern> <size> |
Draw a line between pos1 and pos2 based on pattern and size. |
//curve | ([-h]) <pattern> <size> |
Draw a line based on the ordered multiple set points of «//sel convex». |
//forest | [forest-type] [density] |
Generate a forest type over the grass blocks within the region selection. Density is how the trees are spaced. Flora not included. |
//flora | [density] | Overlay the grass blocks with flowers and grasses. Density is how much they clump in one spot. |
Clipboards and Schematics
Types | Parameters | Description |
---|---|---|
//copy | [-e] [-m] |
Copy the selected region blocks to an imaginary clipboard. It also stores the player’s position where it is copied. |
//cut | [-e] [-m] |
Clear the region blocks and put it in an imaginary clipboard. It also stores the player’s position where it is cut. |
//paste | [-a] [-s] [-o] |
Pastes the region from clipboard based from the player’s position where it is cut or copied last time.
[-a] pastes the selection without air blocks. |
//rotate | [y-axis] [<x-axis>][<z-axis>] |
Rotate the imaginary clipboard based on player’s position when it is cut or copied last time. |
//flip | [direction] | Flip the clipboard like a mirror based on where the player is facing and positioning. |
//schematic (//schem) | [save] [delete] [load] [list] [formats] |
|
save (<format>) <filename> |
Save a schematic to file. | |
delete <filename> |
Remove a schematic from the list. | |
load <filename> |
Load a schematic from the list to the clipboard. | |
list [-dn] [-p <page#>] |
List available schematics from the list’s page number. | |
formats | Display all available schematic formats. | |
/clearclipboard | Clear the current clipboard |
Generation
Types | Parameters | Description |
---|---|---|
//generate | [-hroc] <pattern> <expression> |
Generate a regional shape of blocks based on given expression like geometrical values or mathematical equations. |
//generatebiome | [-hroc] <pattern> <expression> |
Generate a regional biome based on a particular expression |
//hcyl | <pattern> <radius>(,<radius> [height]) |
Create a hollow vertical cylinder around player’s feet based on radius and height. |
//cyl | <pattern> <radius>(,<y radius> [height]) |
Create a vertical cylinder around player’s feet based on radius and height. |
//sphere | <pattern> <radius>(,<radius>,<radius>) [raised? true/false] |
Create a sphere based on x,y,z, radius set around player’s feet. |
//hsphere | <pattern> <radius>(,<radius>,<radius>) [raised? true/false] |
Create a hollow sphere based on x,y,z, radius set around player’s feet. |
//pyramid | <pattern> <size> |
Create a pyramid based on height and size. |
//hpyramid | <pattern> <size> |
Create a hollow pyramid based on height and size. |
/forestgen | [size] [type] [density] |
Generate a forest type based on size and density. |
/pumpkins | [size] | Generates a pumpkin patch based on the size. |
Utilities
Types | Parameters | Description |
---|---|---|
/toggleplace | Toggle whether utility actions will affect surrounding the player or the regional selection. | |
//fill | <pattern> <radius> [depth] |
Fill particular blocks around the player’s feet with the cylinder’s radius and bottom sphere’s depth. |
//fillr | <pattern> <radius> [depth] |
Fill particular blocks around the player’s feet with cylinder’s radius and bottom sphere’s depth recursively. |
//drain | <radius> | Drain lava and water bodies that touches the player’s feet based on radius. |
//fixwater | <radius> | Extend and level nearby water and change flowing water to block state of water. |
//fixlava | <radius> | Extend and level nearby lava and change flowing lava to block state of lava. |
/removeabove | [size] [height] |
Remove blocks above your head or the regional selection with upper air cone style. |
/removebelow | [size] [height] |
Remove blocks below your feet or the regional selection with down-side air cone style. |
/replacenear | [-f] <size> <from-block-ID(s)> <to-pattern> |
Replace all block(s) nearby to pattern. |
/removenear | <block> <size> |
Remove particular block(s) nearby with air sphere style. |
/snow | [radius] | Cover blocks nearby with snow layers and change water to ice. |
/thaw | [radius] | Remove nearby snow layers and change nearby ice to water. |
/ex | [radius] | Remove fire nearby. |
/butcher | [-plangbtfr] [radius] |
Terminate nearby mobs. |
/remove | <type> <radius> |
Remove nearby particular entities: Dropped items, arrows, boats, minecarts, activating TNT, and XP particles. |
/green | [-f] [radius] |
‘Green’ nearby dirt blocks. |
//calc | <expression> | Calculate a mathematical expression |
Chunk Tools
Types | Parameters | Description |
---|---|---|
/chunkinfo | ||
/listchunks | See the loaded chunks. | |
/delchunks | Delete chunk the player is in. |
Superpickaxe Tools
Types | Parameters | Description |
---|---|---|
// | Toggle superpickaxe mode. | |
/sp single | Change to superpickaxe mode that affects single blocks. | |
/sp area | <range> | Change to superpickaxe mode that affects area of blocks. |
/sp recur | <range> | Change to superpickaxe mode that affects area of blocks recursively. |
General Tools
Types | Parameters | Description |
---|---|---|
/tool | <repl> <cycler> <floodfill> <brush> <lrbuild> <tree> <deltree> <farwand> <info> <none> |
Choose a particular tool type to bind to item on hand. |
/none | Remove the command that is binded to the holding tool. | |
/farwand | Enable wand to select point from faraway. | |
/lrbuild | <leftclick block> <rightclick block> |
Long range building too. |
/tree | <tree type> | Tree tool that is used on grass blocks to sprout trees. |
/deltree | Tool to remove floating tree. | |
/repl | <pattern> | Block replacing tool, change that block type on use. |
/cycler | Block data cycler tool | |
/flood | <pattern> <range> |
Flood fill tool |
Brushes
Types | Parameters | Description |
---|---|---|
/brush sphere | [-h] <pattern> [radius] |
Bind sphere brush to holding item that creates sphere when right-clicked on blocks from afar. |
/brush cylinder | [-h] <pattern> [radius] ([height]) |
Bind cylinder brush to holding item that creates cylinder when right-clicked on blocks from afar. |
/brush clipboard | [-ap] | Bind sphere brush to holding item that pastes clipboard when right-clicked on blocks from afar. |
/brush gravity | [-h] [radius] |
Bind gravity brush to holding item that pushes the floating blocks down if there is hollow underneath when right-clicked. |
/brush butcher | [-plangbtfr] [radius] |
Bind butcher brush to holding item that terminates entities and mobs when right-clicked on them. |
/size | [radius] | Change the brush size of current holding brush item. |
/mat | <to-pattern> | Replace the current pattern being used by current brush to a new pattern set. |
/range | <range> | Set the current brush range. |
/mask | Clear the current mask set. | |
/mask | <mask> | Set mask rule to the current holding brush item so it can only affect a particular block type(s) or expression. |
//gmask | <mask> | Set mask rule for every brush. |
Quick-Travel
Types | Parameters | Description |
---|---|---|
/unstuck | Eject the player out to the free spot if the player is suffocated in blocks. | |
/ascend | [levels] | Teleport to the upper floor platform. |
/descend | [levels] | Teleport below the floor platform. |
/thru | Teleport through blocking obstacles. | |
/jumpto | Teleport to the targeted block that the player is looking at. | |
/up | [-fg] [distance] | Teleport to upper distance based on distance amount. |
Snapshots
Types | Parameters | Description |
---|---|---|
//restore | [snapshot] | Restore a particular snapshot if it is already backed up. |
/snapshot use | <snapshot> | Use a particular snapshot. |
/snapshot sel | <index> | Choose a snapshot from the //snapshot list. |
/snapshot list | [#] | List 5 latest recent snapshot. |
/snapshot before | <date> | Find the first snapshot before that date. |
/snapshot after | <<date> | Find the first snapshot after that date. |
Java Scriptings
Types | Parameters | Description |
---|---|---|
//cs | <script> [args…] |
Executes a script. |
/.s | [args…] | Re-executes last script with new arguments |
/<script>.js | [args…] | Executes a JS script. |
Biomes
Types | Parameters | Description |
---|---|---|
/biomelist | [page #] | Bring a list of available biome types. |
/biomeinfo | [-pt] | Get the biome of the targeted block. |
//setbiome | [-p] <biometype>> |
Set the biome type from the selected region.
[-p] to change the block column the player is standing in. |
Обновлено: 10.02.2023
Мод LittleTiles для Майнкрафт можно смело назвать шедевральным, он настолько изменит майнкрафт в плане декорирования, что все остальные моды попросту будут не нужны, да и по сравнению с LittleTiles — функционал не тот. Данный мод добавит в игру маленькие блоки, теперь каждый блок по сути состоит из 32 768 маленьких блоков, вы можете изменить каждый маленький блок, убрать его или добавить, изменить цвет.
В ванильном майнкрафте вы можете строить только из блоков, есть полублоки или плиты, ступени, все они большие и зачастую не позволяют создать красивый и реалистичный декор, тем более, что у них есть правила установки. Стандартный блок имеет текстуру 16х16, что означает, что каждая сторона блока состоит из 16 пикселей, так как блок имеет длину, ширину и высоту, то по сути они состоит из 4096 маленьких блоков — пикселей, изначально мод позволял менять именно столько блоков, но недавно автор пошел еще дальше и позволил менять блок в разрешении 32х, т.е каждая сторона уже состоит из 32 маленьких блоков, а блок целиком насчитывает 32 768 уникальных маленьких блока, каждый вы можете изменить, убрать, добавить, перекрасить. Естественно, если вы планируете делать очень мелкие детали в разрешении 32х, то желательно использовать текстурпак с разрешением 32x.
Я пойму, если из описания выше вы ничего не поняли, просто посмотрите как работают инструменты и вы сразу все поймете.
Инструменты мода LittleTiles и как ими пользоваться?
Little Hammer
Основной инструмент мода, молоток позволяет убирать части блока, вы просто наводите его на блок и сразу увидите выделение 1 пикселя, нажмите на ЛКМ и вы сможете выделять бОльшую часть блока, повторное нажатие ЛКМ уберет всю выделенную область. Инструмент позволит быстро изменять установленный блок.
- Ctrl — если зажать, позволяет временно сохранить выделение, а вы сможете перемещать прицел без изменения выделения блока.
- M — позволяет ставить маркеры, будет полезно, так как их видно сквозь блок.
- C — открывает настройки инструмента, вы можете изменять режим работы инструмента, не просто работа с маленькими блоками, а выделение сфер, треугольников, произвольных областей и очень много разных режимов, что позволяют быстро менять несколько блоков.
- Ctrl+С — позволяет выбрать «разрешение» инструмента, стандартно это 16х, что позволяет менять до 4096 блоков в одном обычном блоке, если выставить 32х один блок будет состоять из 32 768 блоков, а если выбрать 2, то инструмент сразу будет выделять 14 всего блока, т.е один блок будет состоять из 4 достаточно больших блоков.
Little Saw
Инструмент пила позволяет изменять стороны блоков, вы можете увеличить или уменьшить сторону блоков, просто наводите на часть с маленькими блоками, вы увидите выделение и нажатием ПКМ вы прибавите 1 блок, Shift + ПКМ убавит стенку, CTRL + ПКМ достроит блоки до края блока, а ЛКМ уберет целый слой (выделение.)
Это позволит немного редактировать ваши блоки без больших сложностей.
Little Container:
Это сумка которая позволяет «разбирать» маленькие блоки, маленькие структуры (ниже будет написано как это создавать) на составные части, по сути, любые маленькие блоки положенные в сумку будут постепенно собираться в большие блоки, работает только с маленькими блоками, игровые полублоки туда положить не получится.
Little Screwdriver
Инструмент позволяет быстро заменять одни маленькие блоки на другие маленькие блоки.
Сначала взяв в руки выделите начальную точку на ЛКМ, после чего выделите вторую точку на ПКМ, тем самым вы выделите некоторое количество блоков. После нажмите C и вы сможете заменить определенные маленькие блоки в вашем выделении на другие, притом окрасить их. Операцию можно отменить в случае чего.
Little Chisel
Инструмент позволяет устанавливать блоки, т.е по сути является противоположным молотку инструментом.
Позволяет настраивать разрешение, выбирать блок и цвет блока для установки.
Little Paint Brush:
Позволяет окрашивать маленькие блоки, нажав на C выберите цвет, потом вы должны выделить область маленьких блоков подобно молотку, это окрасит установленные блоки.
Little Glove.
Перчатка простой и быстрой установки 1 маленького блока, позволит быстро исправлять ваши постройки, либо создавать простые надписи. При нажатии на C позволяет выбрать размер маленького блока, его текстуру, а так же режим установки, так как она может заменять блоки.
Little Wrench
Ключ, на данный момент только показывает «разрешение» блока при нажатии на Shift + ПКМ
Little Blueprint
Инструмент позволяет копировать и быстро возводить структуры из маленьких блоков, с ним вам достаточно один раз построить предмет декора, а после быстро устанавливать его в мире.
Вы должны выделить вашу маленькую постройку на ЛКМ в одном углу и ПКМ в другом, после подтвердить сохранение на C, вы увидите свою постройку в небольшом интерфейсе. После вы легко сможете устанавливать точно такую же структуру в вашем мире.
Бесплатно скачать последнюю версию Minecraft можно по ссылке:
Как быстро удалить блоки в майнкрафт
КАК СЕТАТЬ **//set 0** В МАЙНКРАФТ ПЕ НА ТЕЛЕФОНЕ БЕЗ МОДОВ И АДДОНОВ! МАЙНКРАФТ ПЕ 1.2-1.16.0.3
Как очищать территория в Minecraft?
КАК КОПАТЬ 400000 БЛОКОВ ЗА 5 СЕКУНД В Minecraft Pe 1.16 БЕЗ МОДОВ ПОЛНЫЙ ОБЗОР
[Гайд] Как изменить границу мира? MineCraft 1.8+
На самом деле управлять границой, т.е. уменьшать и увеличивать размеры, можно одной командой. Но у этом команды много свойств. По дефолту граница очень большая, её координаты оооочень далеки от точки спавна. Уменьшить её можно, прописав в чат или в командном блоке:
Например прописав: /worldborder set 25, радиус границы от точки спавна будет 25. Это очень мало и вы будете видеть все стороны границы. Так же эту фишку можно использовать в картах. Например при открытии сундука или при совершении того или иного действия, в командном блоке прописывается эта команда и граница расширяется.
Бесплатно скачать последнюю версию Minecraft можно по ссылке:
Я СТАЛ САМЫМ МАЛЕНЬКИМ В МАЙНКРАФТ И СДЕЛАТЬ ДОМ В БЛОКЕ В MINECRAFT СЕКРЕТЫ ТУТОРИАЛ ОБЗОР
Как стать маленьким в майнкрафте пе? Без модов.
ЧЕЛОВЕК МУРАВЕЙ В МАЙНКРАФТ БЕЗ МОДОВ
НАСТОЯЩИЙ РЮКЗАК В МАЙНКРАФТ БЕЗ МОДОВ
Как стать маленьким в Майнкрафте
КАК СТАТЬ ЛЮБЫМ МОБОМ В МАЙНКРАФТЕ? (БЕЗ МОДОВ И АДОНОВ)
Как уменьшится в Майнкрафт!
КАК ПОЛЗАТЬ ИЛИ СТАТЬ В ОДИН БЛОК В МАЙНКРАФТ ПЕ. Рубрика лайфхаки
КАК СТАТЬ САМЫМ МАЛЕНЬКИМ В ИГРЕ ? КАК ПРОПОЛЗТИ ЧЕРЕЗ 2 ПИКСЕЛЯ ? В МАЙНКРАФТ ПЕ
КАК УМЕНЬШИТЬСЯ В МАЙНКРАФТ БЕЗ МОДОВ
Выключатели, двери, проводка:
На данный момент автор работает над очень крутым функционалом который позволит сделать ваши структуры из маленьких блоков — функциональными. Из простого вы сможете добавить функционал стула, кровати или сундука для вашей структуры из маленьких блоков, т.е она будет выглядеть как стул и вы сможете на ней сидеть.
Мод добавляет возможность создавать функциональные предметы декора, светильники, выключатели, двери которые будут открываться, сдвигаться или даже собираться. Т.е вы сможете построить дверь, а после настроить как и куда она будет поворачиваться, на сколько градусов, в какую сторону итд итп.
Вы сможете подключить дверь к выключателю при помощи провода, сделав автоматическую дверь с сложной анимацией, все это позволяет делать функциональные объекты декора, мебель, двери.
КАК УБРАТЬ МНОГО БЛОКОВ В МАЙНКРАФТ
Функциональные блоки:
- Litle Workbench — позволяет создавать полноценные предметы из ваших Blueprint, их так же можно установить в мир, но уже не требуется наличие материалов в инвентаре как в случае с Blueprint.
- Litle Expoter — позволяет перевести ваш Blueprint с структурой в некий набор цифр и букв, после скопировать его в буфер обмена, и например послать своему другу или выложить на сайт.
- Litle Imirter — позволяет получить Blueprint с постройкой из набора цифр и букв которые генерирует Expoter, вы должны положить в него чистый Blueprint и вставить сам набор цифр и букв, после получите Blueprint.
- Structure Builder — позволяет создать Blueprint с блоком нужного размера, материала и цвета, вы можете выбрать размер маленького блока и изменить его форму по высоте, ширине и длине.
Читайте также:
- Ziyade atom cayi что это
- Dead island game of the year edition чем отличается от обычной
- Hollow knight как прыгать по шипам
- Как задержать дыхание в dayz
- Сталкер фотограф где найти микроскоп в х 18
WorldEdit — плагин для Bukkit, который представляет собой простой в использовании редактор мира Minecraft. Поддерживает как одиночную так и многопользовательскую игру и позволяет: изменять сразу тысячи блоков в выбранном регионе, использовать более 100 функций для изменения мира или устранения разных проблем и многое другое. Разработкой плагина занимается студия sk89q
Для установки WorldEdit в одиночную игру, нужно просто скачать его в виде отдельной модификации: здесь.
Если вы скачиваете WorldEdit в виде отдельной модификации, то вам может пригодиться дополнение к моду WorldEditCUI, которое визуально отображает сетку выделяемого региона.
В WorldEdit регион выделяется с помощью обозначения точек кубоида.
Кубоид — это параллелепипед, иными словами — прямоугольник в трехмерном виде.
Во время выделения региона в чат выводятся координаты выделенных точек. После выбора 2 точки показывается количество выделенных блоков. Чтобы увидеть выделенный регион, необходимо установить модификацию WorldEdit CUI
С помощью следующих команд вы сможете использовать весь широкий функционал WorldEdit.
Обратите внимание на то что:
Пользуетесь ли вы WorldEdit?
-
Не в сети
-
Администратор
Scrandre
ScrandreВыделение — первое чем тебе придётся заняться. Выделять нужно участки для редактирования, копирования, etc.
Выделение кубоида
Чтобы выделить кубоид, отмечаем 2 противоположные точки:
Отметить точки можно следующими способами:
Левым и правым кликом деревянным топориком (обычно), получить его можно командой //wand.
Командами //pos1 и //pos2 (будет использовано положение игрока).
Командами //hpos1 и //hpos2 (будут использованы блоки, на которые направлен прицел). Эти команды лучше всего повесить на какие-нибудь клавиши.Подстройка выделения.
Расширить выделение можно командой //expand (количество блоков) (направление).
Направления могут быть следующие (относительно игрока):
F — вперёд (по умолчанию),
B — назад,
L — влево,
R — вправо,
N — на сервер,
S — на юг,
W — на запад,
E — на восток,
U — вверх,
D — вниз.Вот вид сверху:
Уменьшить регион можно командой //contract (количество блоков) (направление)
Максимально расширить выделение по высоте можно командой //expand vert.
Сдвинуть выделение можно командой //shift (количество блоков) (направление)
Информация о выделении
Получить размер выделения — //size,
Посчитать количество блоков нужного типа в выделении — //count (тип блока),
Распределение типов блоков в выделении — //distr.Режимы выделения
Выделение кубоида — //sel cuboid,
Расширение кубоида — //sel extend. Левый клик выделяет кубоид 1x1x1, правый увеличивает кубоид так, чтобы он включил в себя новую точку,
Выделение полигона — //sel poly. Левый клик выделяет первую точку, правый — добавляет новую точку к полигону,
Выделение эллипсоида — //sel ellipsoid. Левый клик выделяет центр, правый добавляет точки, которые должны быть вписаны в эллипсоид.
Выделение сферы — //sel sphere. Выделяется также, как и эллипсоид.
Выделение цилиндра — //sel cyl. Выделяется также, как и эллипсоид.
На скриншотах выделение показывается сеточкой с помощью мода клиента WorldEditCUI. (Рекомендую установить этот мод)
Снятие выделения.
Снять выделение можно командой //sel.
Операции с блоками
При всех операциях с блоками нужно быть очень осторожным. Неаккуратные действия могут привести к большим разрушениям или полному уничтожению мира.
Прежде, чем выполнять команды, что-либо изменяющие, нужно установить лимит изменения блоков командой //limit (количество блоков). Для большинства действий достаточно лимита в 5-10 тысяч блоков. Рекомендую устанавливать лимит прежде, чем начинать что-либо строить с WorldEdit.
Также иногда полезно установить глобальную маску, чтобы ограничить типы блоков, которые может изменять WorldEdit командой //gmask (параметры).
Примеры масок:
rock,glass — разрешить только изменение блоков камня, стекла
!rock,glass — запретить изменение блоков камня, стекла
#existing — только существующие блоки (то же, что и !0)
>rock,glass — ставить блоки только над указанными
#region — разрешить изменять только выделенные блокиМаски можно комбинировать. Например, //gmask #region sand,sandstone,stone,air — разрешить изменять только выделенные блоки воздуха, камня, песчанника и песка.
Рекомендую выделить безопасную область и указать //gmask #region, прежде чем что-либо строить с WorldEdit.
Чтобы выключить глобальую маску, введи //gmask.
//undo — отменить предыдущую операцию WorldEdit, //undo (количество) — отменить несколько операций. Команда //undo отменяет только изменения блоков, сделанные самим WorldEdit. Например, если ты удалишь потолок в пещере и вниз посыпется песок или гравий, либо поток воды смоет рельсы или схемы из редстоуна, эти разрушения будут необратимы.
//redo — повторить операцию после //undo, либо //redo (количество) — повторить несколько операций.
Заполнение области
Заполнить всё выделение определёнными блоками — //set (тип блока).
Например, //set glass — заполнить выделение стеклом. //set 0 — заполнить выделение воздухом (удалить все блоки).
Посмотреть идентификаторы блоков можно на вики. Или установить мод TooManyItems, показывающий ID блоков в игре. Дополнительные сведения о блоке можно указывать через «:», например, wool:red (или 35:14) — красная шерсть.
Для многих блоков (табличек, ступенек, факелов) дополнительные сведения — положение в пространстве. Например, //set torch даст такой результат:
А //set torch:3 (1..4 — ориентация факела относительно сторон света) — такой:
Можно указать несколько блоков одновременно через «,», в таком случае выделение будет заполнено выбранными блоками в случайном порядке. Например,
//set wool:white,wool:red
даст такой результат:При выборе нескольких блоков можно указать «шанс» для каждого блока в процентах. Например,
//set 5%wool:yellow,5%wool:red,90%wool:white
даст такой результат:Для табличек можно указать текст. Например,
//set sign:3|строка1|строка2|строка3|строка4
Для спавнеров — тип моба.
//set mobspawner|chicken
Для нотных блоков — тон (от 0 до 24)
//set noteblock|10
Обрати внимание, что вся строка, задающая набор блоков пишется без пробелов.
Замена блоков
Заменить выбранные блоки другими — //replace (что) (чем).
Например,
//replace grass wool:green,
//replace water wool:blue,
//replace sand wool:white,
//replace log wool:brown,
//replace leaves wool:lightgreen,
даст такой результат:Можно указывать набор блоков как заменяемых, так и устанавливаемых.
Например,
//replace grass,dirt,stone,gravel,sand 0
обнажит руды:Постройка стен
Можно создать стены вокруг выделения командой //walls (тип блоков)
Например, //walls 90%4,10%48 даст такой результат:
Создать закрытую коробку можно командой //outline, в отличие от //walls стены будут созданы также сверху и снизу.
Покрытие
Покрыть поверхность определённым блоком можно командой //overlay (тип блока).
Результат выполнения //overlay glass:
Размножение (стекирование)
Размножить выделенную область в определённую сторону можно командой //stack (количество копий).
Результат выполнения //stack 5:
Сдвиг
Сдвинуть выделенные блоки можно командой //move (расстояние) (направление)
Результат выполнения //move 10 U:
Сглаживание
Сгладить поверхность по высоте можно командой //smooth (количество проходов). Количество проходов — сколько раз алгоритм будет применён к выделению. Слишком большое число может привести к зависанию сервера.
Возьмём для примера вот такой цилиндр:
Выделим цилиндр плюс область на 10 блоков вокруг цилиндра и выполним //smooth 100. Результат:
Команду //smooth удобно использовать для создания искусственных островков, холмов, etc.
Если в выделение попадут деревья, дома, etc., они будут размазаны по поверхности. Желательно очистить поверхность прежде чем выполнять сглаживание.
Регенерация карты
Выделенный регион можно регенерировать командой //regen. При этом выделенный участок будет заменён на такой, каким он был на новой карте. Регенерация может также немного повредить постройки находящиеся недалеко от регенерируемого участка. Например, некоторые блоки могут быть заменены на блоки руды, гравия, земли, etc.
Деформация региона
К участку карты можно применить произвольную трансформацию командой //deform [-r] [-o] (выражение).
Входные и выходные параметры выражения — координаты x, y, z.
Диапазон координат зависит от флагов:
-r — использовать абсолютные координаты.
-o — использовать координаты относительно pos1 — первой точки выделения.
По умолчанию используются координаты в выделении, приведённые к диапазону -1..1.Описание синтаксиса выражений здесь.
Примеры:
//deform t=x; x=z; z=t
«обменять» z и x местами.//deform x_=x; z_=z; x=x_*cos(pi/4)+z_*sin(pi/4); z=x_*sin(pi/4)-z_*cos(pi/4)
повернуть выделение на 45° (соответствующий матан описан в вики)//deform y+=0.2*sin(x*10)
сделать поверхность волнистойДеформация — мощное и удобное средство, но требующее некоторого опыта
Буфер обмена
Участки карты можно копировать, переносить, сохранять и загружать.
Копирование
Скопировать выделенный участок в буфер обмена можно командой //copy. При этом сохраняются координаты блоков относительно игрока. Так что при вставке участок появится в том же положении относительно игрока, в каком находился при копировании.
Вырезание
Вырезать участок можно командой //cut (оставляемые блоки).
Эта команда отличается от //copy тем, что после копирования выделенные блоки будут удалены (кроме блоков, указанных в параметре команды).
Вставка
Вставить участок из буфера обмена можно командой //paste [-a] [-o].
Флаг -o — вставить участок в том же месте, откуда он был скопирован независимо от положения игрока.
Флаг -a — вставлять все блоки кроме воздуха.Без флагов участок вставляется в том же месте относительно игрока, в каком он находился при копировании. При этом не имеет значения в какую сторону смотрит игрок, используется разница в координатах между блоками выделения и игроком.
Поворот
Можно повернуть содержимое буфера обмена относительно оси Y. При этом центром поворота является точка, в которой находился игрок в момент копирования участка. Поворот выполняется командой //rotate (угол в градусах). Поворачивать можно только на угол, кратный 90°
Если ты хочешь повернуть постройку относительно её центра, нужно скопировать её, находясь в её центре, затем выполнять поворот.
Помочь в рассчёте углов может параметр f, который видно в отладочном экране, который отображается по F3.
Например, если ты скопировал свой дом, находясь перед его фасадом, и значение параметра f было равно 3, а в новом месте — равно 2, то нужно выполнить на -90 градусов, и дом будет вставлен фасадом к тебе.
Отражение
Можно отразить выделенную область относительно плоскости командой //flip [-p] (направление). Содержимое буфера обмена отражается относительно плоскости, перпендикулярной указанному направлению. Возможные плоскости — xz (верх-низ), xy (восток-запад), yz (сервер-юг).
Флаг -p означает, что нужно использовать плоскость, проходящую через текущее положение игрока. По умолчанию, используется плоскость проходящая через центр участка.
Результат выполнения //copy, //flip up, //paste
Загрузка и сохранение
Содержимое буфера обмена можно сохранить в файл или загрузить из файла. Таким образом, можно сохранять часто используемые части конструкций, переносить постройки между серверами, либо между одиночной игрой и сервером.
Сам файл сохраняется на сервере, чтобы получить сохранённый файл или загрузить свой может понадобиться помощь администратора.
Команда: //schem (save|load) (формат) (имя файла)
Формат — mcedit (наиболее распространённый) или mce (новый, поддерживается с версии 5.3).
Очистка буфера обмена
Удалить содержимое буфера обмена из памяти можно командой /clearclipboard.
Использование буфера обмена для заливки
Содержимое буфера обмена можно использовать для заливки участков, указав в командах, изменяющих блоки значение #clipboard.
Например, скопируем такой образец:
Выделим участок и введём //set #clipboard. Результат:
Генерация фигур
Можно генерировать небольшой набор фигур.
//cyl (блок) (радиус) [высота] — цилиндр или круг,
//hcyl (блок) (радиус) [высота] — полый цилиндр или кольцо.Если высота не указана, генерируется круг или кольцо (высота 1).
Эллиптический цилиндр/круг/кольцо
//cyl (блок) (радиус1,радиус2) [высота] — эллиптический цилиндр,
//hcyl (блок) (радиус1,радиус2) [высота] — эллиптический полый цилиндр.Радиус1 — радиус по оси восток-запад,
Радиус2 — радиус по оси север-юг.//sphere (блок) (радиус) (поднятая?) — сфера,
//hsphere (блок) (радиус) (поднятая?) — полая сфера.Последний параметр указывает в каком месте относительно игрока будет создана сфера. Если указано yes — нижняя точка сферы будет в позиции игрока. По умолчанию, центр сферы будет в позиции игрока.
//pyramid (блок) (высота) — пирамида,
//hpyramid (блок) (высота) — полая пирамида. Генерация леса стандартным алгоритмом minecraft’а./forestgen (размер) [тип] [плотность]
Размер — указывает размер (длину ребра) кубической области вокруг игрока, в которой будет выращиваться лес.
Тип — смотри типы деревьев,
Плотность — число от 0 до 100 (или от 0.0 до 1.0). По умолчанию — 5 (очень плотный лес).Деревья могут рости только на траве или земле.
/pumpkins (размер)
Произвольные фигуры
Можно создать произвольную фигуру (в выделенной области) по формуле.
//g (блок) (выражение)
Возможные флаги:
-r — использовать абсолютные координаты,
-o — использовать координаты относительно первой точки выделения,
-h — создать полую фигуру.По умолчанию координаты приводятся к диапазону -1..1.
Входные параметры:
x, y, z — координаты.
Выходные/выходные параметры:
type, data — материал. По умолчанию — указанный в команде.
Возвращаемое выражением значение:
true (>0) — поместить в точке (x,y,z) блок, false (<=0) — не помещать блок.
Синтаксис выражений здесь.
Примеры:
//g stone (0.75-sqrt(x^2+y^2))^2+z^2 < 0.25^2
Тор с внутренним радиусом 0.25 и внешним 0.75,//g -h log (0.5+sin(atan2(x,z)*8)*0.2)*(sqrt(x*x+z*z)/0.5)^(-2)-1.2 < y
Корявое полое дерево,//g wool data=(32+15/2/pi*atan2(x,y))%16; (0.75-sqrt(x^2+y^2))^2+z^2 < 0.25^2
Разноцветный тор,//g wool data=(32+y*16+1)%16; y^2/9+x^2/6*(1/(1-0.4*y))+z^2/6*(1/(1-0.4*y))<0.08
Разноцветное яйцо,//g wool:red (z/2)^2+x^2+(5*y/4-sqrt(abs(x)))^2<0.6
Сердечко,//g -h glass sin(x*5)/2<y
Синусоида,//g -h glass cos(sqrt(x^2+z^2)*5)/2<y
Спиральная косинусоида.Утилиты
В WorldEdit есть набор полезных инструментов для терраформирования.
Заполнение ям
//fill (блок) (радиус) (глубина)
Этой командой можно заполнять провалы в поверхности. Команда заменяет воздух вокруг игрока на указанный блок до указанного радиуса и глубины (или пока не встретится стенка/дно). Если яма расширяется в нижней части, команда не заполняет расширение. Заполняется только часть ямы, которую видно, если смотреть вертикально вниз на яму.
Рекурсивоное заполнение ям
//fillr (блок) (радиус)
В отличие от //fill, если яма расширяется ниже позиции игрока, команда заполняет и расширение.
Удаление воды и лавы
//drain (радиус) — удалить блоки воды или лавы начиная от позиции игрока, заканчивая указанным радиусом или пока не встретится стенка/дно.
Восстановление бассейнов воды или лавы
Расширить бассейн воды или лавы в стороны и в глубину начиная от позиции игрока до указанного радиуса (или пока не встретится стенка/дно):
/fixwater (радиус)
/fixlava (радиус)Команда также заменяет потоки воды на источники.
Будьте осторожны с командами, //fill, //fillr, /fixwater, /fixlava, при неаккуратном обращении ими можно затопить очень большую территорию. Также новые блоки воды могут создать дополнительные источники, которые не удалит команда //undo. Заполнение лавой может привести к пожарам.
Изменение блоков вокруг игрока
//removeabove (размер) [высота] — очистить столб блоков над игроком,
//removebelow (размер) [высота] — очистить столб блоков под игроком,Размер указывается в стороны от игрока. Например, //removebelow 5 10 — удалить столб блоков под игроком с верхом 9×9 и высотой 10 блоков.
//removenear (блок) (размер) — удалить блоки в кубе с игроком в центре.
Размер — количество блоков от игрока до стенок куба. Например, //removenear stone 5 — удалить камень в кубе размером 9x9x9 вокруг игрока.
//replacenear (размер) (что) (чем) — заменить блоки в кубе с игроком в центре.
Симулировать снегопад
/snow (радиус) — «заморозить» территорию указанного радиуса вокруг игрока. Территория покрывается снегом, вода замерзает.
Оттаять территорию/thaw (радиус) — «разморозить» территорию указанного радиуса вокруг игрока. Удаляется снег, лёт растаивает.
Удаление мобов
/butcher [флаги] (радиус)
Удалить мобов в указанном радиусе.
Флаги:
-a — включая мирных мобов,
-n — включая NPC,
-p — включая прирученных мобов.Тушение пожаров
//ex (радиус) — удалить блоки огня в указанном радиусе.
Инструменты
В WorldEdit есть несколько полезных инструментов. Инструменты можно привязать к какому-либо предмету (палочке, деревянному мечу, кусочку угля, и т.д., к блокам — нельзя). Для этого нужно взять предмет в руку и ввести команду /tool (тип инструмента). Отвязать инструмент от предмета — /none. Использовать инструмент можно с помощью правой кнопки.
/tree — обычное дерево (дуб)
/tree (тип дерева) — определённое дерево
/tree random — случайное деревоСписок типов деревьев здесь.
Удаление недорубленных деревьев/deltree
Недорубленное дерево — висящие в воздухе блоки листвы, ствола (лиан, снега), не связанные с чем-либо ещё.
/repl (тип блока)
Левая кнопка — выбрать новый блок, правая — заменить блок на выбранный.
Удалённая установка блоков/lrbuild (левый клик) (правый клик)
Укажи блоки для установки по левому и правому клику. Блоки будут устанавливаться там, куда ты прицелишься. Если указать 0 (или air), блоки будут удаляться.
Удалённое выделение блоков/farwand
Позволяет производить выделение издалека. Наведи прицел на удалённый блок, нажми левую кнопку для выделения первой точки, правую — для последующих.
/cycler
Позволяет циклически изменять данные блока: поворачивать таблички, изменять цвет шерсти, etc.
/info
Выводит сведения о блоке в таком виде:
@(координаты) #тип (имя) [данные] (светимость/освещённость)
/flood (блоки) (радиус)
Заменяет группу блоков одного типа на указанный блок (не дальше указанного радиуса).
Например,
//flood obsidian 5
КистиИспользуются кисти также, как остальные инструменты. Выбранное действие применяется в точке, на которую направлен прицел.
/brush sphere [-h] (блок) (радиус) — создание сферы
/brush cyl [-h] (блок) (радиус) (высота) — создание цилиндра
/brush clipboard [-a] — вставка из буфера обмена
/brush smooth [-n] (размер) (число проходов) — сглаживание
/none — выключить кистьДля кисти можно установить отдельную маску командой /mask (параметры). Параметры те же, что и для команды //gmask.
Изменить размер текущей кисти можно командой /size (размер) (максимум — 5).
Навигация
/unstuck — Подняться на уровень вверх, если ты оказался замурован в блоках,
/ascend (количество уровней) — Подняться на несколько уровней («этажей») вверх,
/descend (количество уровней) — Спуститься на несколько уровней вниз,
/thru (пкм с компасом в руке) — Пройти сквозь стену,
/jumpto (лкм с компасом в руке) — Переместиться к выбранному блоку,
/up (расстояние) — переместиться на указанное расстояние вверх. Под ногами будет создан блок стекла.Выделение
Расширить выделение во всех направлениях
//outset [-h] [-v] (количество блоков)
-h — только горизонтально
-v — только вертикальноИмя привилегии: worldedit.selection.outset
Сжать выделение во всех направлениях
//inset [-h] [-v] (количество блоков)
-h — только горизонтально
-v — только вертикальноИмя привилегии: worldedit.selection.inset
Снять выделение
//desel, //deselect
Псевдонимы //sel
КистиГравикисть
/br[ush] grav[ity] [-h] (радиус)
Симулирует действие гравитации на выбранные блоки.
-h — расширить действие эффекта до верхней границы мира.
Имя привилегии: worldedit.brush.gravity
ОперацииОблагораживание
//naturalize
Заменяет блоки травы, земли и камня. Находит в каждом «столбике» верхний блок какого-либо из указанных типов, заменяет его на траву. 3 блока ниже — земля, далее камень (заменяются только блоки травы, земли или камня, любые другие блоки не трогаются).
Привелегия: worldedit.region.naturalize
Удаление внутренних блоков
//hollow (толщина стенок) [блок]
Удаляет внутренние блоки объекта, содержащегося в выделении, оставляя стенки указанной толщины (если указан блок, заменяет внутренние блоки на него).
Толщина стенок измеряется как манхэттенское расстояние (сумма расстояний по всем координатам).Привилегия: worldedit.region.hollow
БиомыСписок биом
/biomelist (номер страницы)
/biomels (номер страницы)Выводит список всех возможных типы биомов.
Имя привилегии: worldedit.biome.list
Определить биом
/biomeinfo [-p] [-t]
Выводит тип биома.
-p — использовать положение игрока.
-t — использовать блок, на который смотрит игрок.
По умолчанию выводятся типы всех биом, входящих в выделение.Имя привилегии: worldedit.biome.info
Установить биом
//setbiome [-p] (тип биома)
Устанавливает тип биома для блока или региона.
-p — использовать положение игрока (установить тип биома для 1 блока).
По умолчанию используется текущее выделение.Имя привилегии: worldedit.biome.set
-
Поделиться этой страницей