BlockRowCommand class
Пакет: com.hypixel.hytale.server.core.universe.world.commands.block
Файл: com/hypixel/hytale/server/core/universe/world/commands/block/BlockRowCommand.java
extends: AbstractPlayerCommand
Поля (24)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
RequiredArg<String> |
queryArg |
|
double |
var1 |
|
String |
var10 |
|
List |
var11 |
|
BlockType |
var11 |
|
List |
var12 |
|
Box |
var12 |
|
double |
var13 |
|
Vector3i |
var15 |
|
long |
var16 |
|
List |
var2 |
|
int |
var3 |
|
double |
var3 |
|
BlockTypeAssetMap |
var3 |
|
IndexedLookupTableAssetMap |
var5 |
|
double |
var5 |
|
TransformComponent |
var6 |
|
Axis |
var6 |
|
HeadRotation |
var7 |
|
int |
var7 |
|
BlockType |
var7 |
|
Vector3d |
var8 |
|
Vector3i |
var9 |
|
int |
var9 |
Методы (6)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
|
for for(int var8 = 0; var8 < var4.size() |
abstract |
|
for for(int var10 = 0; var10 < var7 && var8 + var10 < var4.size() |
|
|
if if(var1 > var3 && var1 > var5) |
|
|
if if(var0.x != 0) |
private |
void |
spawnBlocksRowvoid spawnBlocksRow(@Nonnull World var1, @Nonnull Vector3d var2, @Nonnull Vector3i var3, @Nonnull List<BlockType> var4) |
abstract |
|
super super("row", "server.commands.block.row.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.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.common.util.StringUtil;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.Axis;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
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.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.Rotation;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandContext;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandUtil;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
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.WildcardMatch;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;
class="kw">public class BlockRowCommand class="kw">extends AbstractPlayerCommand {
class="kw">private class="kw">final RequiredArg<String> queryArg = this.withRequiredArg("wildcard block query", "server.commands.block.row.arg.desc", ArgTypes.STRING);
class="kw">private class="kw">static class="kw">final int MAX_MATCHES = 64;
class="kw">public BlockRowCommand() {
super("row", "server.commands.block.row.desc");
}
@Override
class="kw">protected void execute(
@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
) {
TransformComponent var6 = var2.getComponent(var3, TransformComponent.getComponentType());
assert var6 != null;
HeadRotation var7 = var2.getComponent(var3, HeadRotation.getComponentType());
assert var7 != null;
Vector3d var8 = var6.getPosition();
Vector3i var9 = getDominantCardinal(var7.getDirection());
String var10 = var1.get(this.queryArg);
List var11 = this.findBlockTypes(var10);
if (var11.isEmpty()) {
var4.sendMessage(Message.translation("server.commands.block.row.nonefound").param("query", var10));
List var12 = StringUtil.sortByFuzzyDistance(var10, BlockType.getAssetMap().getAssetMap().keySet(), CommandUtil.RECOMMEND_COUNT);
if (!var12.isEmpty()) {
var4.sendMessage(Message.translation("server.commands.block.row.fuzzymatches").param("choices", var12.toString()));
}
} else if (var11.size() >= 64) {
var4.sendMessage(Message.translation("server.commands.block.row.toomanymatches").param("max", 64));
} else {
this.spawnBlocksRow(var5, var8, var9, var11);
}
}
class="kw">private void spawnBlocksRow(@Nonnull World var1, @Nonnull Vector3d var2, @Nonnull Vector3i var3, @Nonnull List<BlockType> var4) {
IndexedLookupTableAssetMap var5 = BlockBoundingBoxes.getAssetMap();
Axis var6 = getAxis(var3);
int var7 = 25;
for (int var8 = 0; var8 < var4.size(); var8 += var7) {
int var9 = 1;
for (int var10 = 0; var10 < var7 && var8 + var10 < var4.size(); var10++) {
BlockType var11 = var4.get(var10 + var8);
Box var12 = var5.getAsset(var11.getHitboxTypeIndex()).get(0).getBoundingBox();
double var13 = Math.ceil(var12.dimension(var6));
var9 += (int)(Math.floor(var13) + 1.0);
Vector3i var15 = new Vector3i(MathUtil.floor(var2.x), MathUtil.floor(var2.y), MathUtil.floor(var2.z))
.add(new Vector3i(var3).mul(var9))
.add(Rotation.Ninety.rotateY(var3, new Vector3i()).mul(var8 / var7 * 2));
long var16 = ChunkUtil.indexChunkFromBlock(var15.x, var15.z);
var1.getChunkAsync(var16).thenAccept(var2x -> {
int var3 = 196;
var2x.setBlock(var15.x, var15.y, var15.z, var11, 196);
});
}
}
}
@Nonnull
class="kw">private class="kw">static Vector3i getDominantCardinal(@Nonnull Vector3d var0) {
double var1 = Math.abs(var0.x);
double var3 = Math.abs(var0.y);
double var5 = Math.abs(var0.z);
if (var1 > var3 && var1 > var5) {
class="kw">return new Vector3i((int)Math.signum(var0.x), 0, 0);
} else {
class="kw">return var3 > var5 ? new Vector3i(0, (int)Math.signum(var0.y), 0) : new Vector3i(0, 0, (int)Math.signum(var0.z));
}
}
@Nonnull
class="kw">private class="kw">static Axis getAxis(@Nonnull Vector3i var0) {
if (var0.x != 0) {
class="kw">return Axis.X;
} else {
class="kw">return var0.z != 0 ? Axis.Z : Axis.Y;
}
}
@Nonnull
class="kw">private List<BlockType> findBlockTypes(String var1) {
List var2 = new ObjectArrayList();
BlockTypeAssetMap var3 = BlockType.getAssetMap();
for (String var6 : var3.getAssetMap().keySet()) {
if (WildcardMatch.test(var6, var1)) {
BlockType var7 = var3.getAsset(var6);
var2.add(var7);
}
}
class="kw">return var2.stream().sorted(Comparator.comparing(BlockType::getId)).toList();
}
}