BlockSelectCommand class
Пакет: com.hypixel.hytale.server.core.universe.world.commands.block
Файл: com/hypixel/hytale/server/core/universe/world/commands/block/BlockSelectCommand.java
extends: AbstractPlayerCommand
Поля (35)
| Модификаторы | Тип | Имя |
|---|---|---|
|
BlockFlipType |
var10 |
|
BlockTypeAssetMap |
var12 |
|
int |
var13 |
|
int |
var17 |
|
Box |
var17 |
|
double |
var18 |
|
int |
var18 |
|
int |
var19 |
|
String |
var20 |
|
|
var20 |
|
|
var20 |
|
|
var20 |
|
int |
var20 |
|
String |
var21 |
|
VariantRotation |
var22 |
|
Entry |
var22 |
|
String |
var23 |
|
BlockBoundingBoxes.RotatedVariantBoxes |
var23 |
|
List |
var24 |
|
Box |
var25 |
|
int |
var27 |
|
int |
var29 |
|
int |
var30 |
|
int |
var31 |
|
int |
var32 |
|
Player |
var6 |
|
SelectionProvider |
var7 |
|
int |
var7 |
|
Pattern |
var8 |
|
Stream |
var9 |
|
|
var9 |
|
|
var9 |
|
|
var9 |
|
|
var9 |
|
|
var9 |
Методы (8)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(Entry var28 : var24) |
|
|
for for(int var14 = -var27; var14 < var29 * var30; var14++) |
|
|
for for(int var15 = -var27; var15 < var29 * var31; var15++) |
|
|
for for(int var16 = 1; var16 < var18; var16++) |
abstract |
|
for for(int var21 = 0; var21 < var24.size() |
|
|
if if(var7 == null) |
|
|
if if(var4x != 0 || var5x != 0 || var6x != 0) |
abstract |
|
super super("blockselect", "server.commands.block.select.desc") |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.commands.block;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFlipType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.VariantRotation;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandContext;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.DefaultArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.FlagArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.OptionalArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.EnumArgumentType;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.SingleArgumentType;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.command.system.exceptions.GeneralCommandException;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.SelectionManager;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.SelectionProvider;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.FillerBlockUtil;
class="kw">import java.util.Collections;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.regex.Pattern;
class="kw">import java.util.stream.Stream;
class="kw">import javax.annotation.Nonnull;
class="kw">public class BlockSelectCommand class="kw">extends AbstractPlayerCommand {
@Nonnull
class="kw">private class="kw">static class="kw">final SingleArgumentType<BlockFlipType> BLOCK_FLIP_TYPE = new EnumArgumentType<>(
"server.commands.parsing.argtype.blockfliptype.name", BlockFlipType.class
);
@Nonnull
class="kw">private class="kw">static class="kw">final SingleArgumentType<VariantRotation> VARIANT_ROTATION = new EnumArgumentType<>(
"server.commands.parsing.argtype.variantrotation.name", VariantRotation.class
);
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_BLOCK_SELECT_DONE = Message.translation("server.commands.block.select.done");
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_BLOCK_SELECT_NO_SELECTION_PROVIDER = Message.translation("server.commands.block.select.noSelectionProvider");
@Nonnull
class="kw">private class="kw">final OptionalArg<String> regexArg = this.withOptionalArg("regex", "server.commands.block.select.regex.desc", ArgTypes.STRING);
@Nonnull
class="kw">private class="kw">final FlagArg allFlag = this.withFlagArg("all", "server.commands.block.select.all.desc");
@Nonnull
class="kw">private class="kw">final OptionalArg<String> sortArg = this.withOptionalArg("sort", "server.commands.block.select.sort.desc", ArgTypes.STRING);
@Nonnull
class="kw">private class="kw">final OptionalArg<BlockFlipType> flipTypeArg = this.withOptionalArg("fliptype", "server.commands.block.select.fliptype.desc", BLOCK_FLIP_TYPE);
@Nonnull
class="kw">private class="kw">final OptionalArg<VariantRotation> variantRotationArg = this.withOptionalArg(
"variantrotation", "server.commands.block.select.variantrotation.desc", VARIANT_ROTATION
);
@Nonnull
class="kw">private class="kw">final DefaultArg<Integer> paddingArg = this.withDefaultArg("padding", "server.commands.block.select.padding.desc", ArgTypes.INTEGER, 1, "1");
@Nonnull
class="kw">private class="kw">final OptionalArg<String> groundArg = this.withOptionalArg("ground", "server.commands.block.select.ground.desc", ArgTypes.STRING);
class="kw">public BlockSelectCommand() {
super("blockselect", "server.commands.block.select.desc");
this.setPermissionGroups("hytale:WorldEditor");
}
@Override
class="kw">protected void execute(
@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
) {
Player var6 = var2.getComponent(var3, Player.getComponentType());
assert var6 != null;
SelectionProvider var7 = SelectionManager.getSelectionProvider();
if (var7 == null) {
var1.sendMessage(MESSAGE_COMMANDS_BLOCK_SELECT_NO_SELECTION_PROVIDER);
} else {
Pattern var8 = this.regexArg.provided(var1) ? Pattern.compile(this.regexArg.get(var1)) : null;
Stream var9 = BlockType.getAssetMap()
.getAssetMap()
.entrySet()
.parallelStream()
.filter(var0 -> !var0.getValue().isUnknown())
.filter(var1x -> var8 == null || var8.matcher(var1x.getKey()).matches());
if (!this.allFlag.get(var1)) {
var9 = var9.filter(var0 -> !var0.getValue().isState());
}
if (this.flipTypeArg.provided(var1)) {
BlockFlipType var10 = this.flipTypeArg.get(var1);
var9 = var9.filter(var1x -> var1x.getValue().getFlipType() == var10);
}
if (this.variantRotationArg.provided(var1)) {
VariantRotation var22 = this.variantRotationArg.get(var1);
var9 = var9.filter(var1x -> var1x.getValue().getVariantRotation() == var22);
}
if (this.sortArg.provided(var1)) {
String var23 = this.sortArg.get(var1);
if (var23.isEmpty()) {
var9 = var9.sorted(Entry.comparingByKey());
} else {
for (String var14 : var23.split(",", 0)) {
var9 = class="kw">switch (var14) {
case "key" -> var9.sorted(Entry.comparingByKey());
case "name" -> var9.sorted(Entry.comparingByKey());
case "reverse" -> var9.sorted(Collections.reverseOrder());
class="kw">default -> throw new GeneralCommandException(Message.translation("server.commands.block.select.invalidSortType").param("sortType", var14));
};
}
}
}
List var24 = var9.map(var0 -> Map.entry(var0.getKey(), BlockBoundingBoxes.getAssetMap().getAsset(var0.getValue().getHitboxTypeIndex()))).toList();
var1.sendMessage(Message.translation("server.commands.block.select.select").param("count", var24.size()));
Box var25 = new Box();
for (Entry var28 : var24) {
var25.union(var28.getValue().get(0).getBoundingBox());
}
int var27 = this.paddingArg.get(var1);
int var29 = MathUtil.ceil(Math.sqrt(var24.size())) + 1;
int var30 = MathUtil.ceil(var25.width()) + var27;
int var31 = MathUtil.ceil(var25.depth()) + var27;
int var32 = var30 / 2;
int var17 = var31 / 2;
double var18 = var25.height();
String var20;
if (this.groundArg.provided(var1)) {
var20 = this.groundArg.get(var1);
} else {
String var21 = "Rock_Stone";
if (BlockType.getAssetMap().getAsset("Rock_Stone") != null) {
var20 = "Rock_Stone";
} else {
var20 = "Unknown";
}
}
var7.computeSelectionCopy(var3, var6, var11 -> {
BlockTypeAssetMap var12 = BlockType.getAssetMap();
int var13 = var12.getIndex(var20);
for (int var14 = -var27; var14 < var29 * var30; var14++) {
for (int var15 = -var27; var15 < var29 * var31; var15++) {
var11.addBlockAtWorldPos(var14, 0, var15, var13, 0, 0, 0);
for (int var16 = 1; var16 < var18; var16++) {
var11.addBlockAtWorldPos(var14, var16, var15, 0, 0, 0, 0);
}
}
}
for (int var21 = 0; var21 < var24.size(); var21++) {
Entry var22 = var24.get(var21);
BlockBoundingBoxes.RotatedVariantBoxes var23 = var22.getValue().get(0);
Box var17 = var23.getBoundingBox();
int var18 = var21 % var29 * var30 + var32 + MathUtil.floor(var17.middleX());
int var19 = var21 / var29 * var31 + var17 + MathUtil.floor(var17.middleZ());
int var20 = var12.getIndex(var22.getKey());
var11.addBlockAtWorldPos(var18, 1, var19, var20, 0, 0, 0);
if (var22.getValue().protrudesUnitBox()) {
FillerBlockUtil.forEachFillerBlock(var23, (var4x, var5x, var6x) -> {
if (var4x != 0 || var5x != 0 || var6x != 0) {
int var7 = FillerBlockUtil.pack(var4x, var5x, var6x);
var11.addBlockAtWorldPos(var18 + var4x, 1 + var5x, var19 + var6x, var20, 0, var7, 0);
}
});
}
}
var1.sendMessage(MESSAGE_COMMANDS_BLOCK_SELECT_DONE);
}, var2);
}
}
}