PrefabLoadCommand class
Пакет: com.hypixel.hytale.builtin.buildertools.commands
Файл: com/hypixel/hytale/builtin/buildertools/commands/PrefabCommand.java
extends: AbstractPlayerCommand
Поля (2)
| Модификаторы | Тип | Имя |
|---|---|---|
|
Player |
var6 |
|
BuilderToolsPlugin.BuilderState |
var7 |
Методы (2)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
protected void |
executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5) |
abstract |
|
super super("load", "server.commands.prefab.load.desc") |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.commands;
class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsPlugin;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsUserData;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.saving.SupportMode;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefablist.PrefabPage;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefablist.PrefabSavePage;
class="kw">import com.hypixel.hytale.builtin.buildertools.utils.RecursivePrefabLoader;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
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.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.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.AbstractCommandCollection;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.CommandBase;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.singleplayer.SingleplayerModule;
class="kw">import com.hypixel.hytale.server.core.permissions.HytalePermissions;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabFormat;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.standard.BlockSelection;
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.io.FileUtil;
class="kw">import com.hypixel.hytale.server.core.util.message.MessageFormat;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.FileVisitResult;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.SimpleFileVisitor;
class="kw">import java.nio.file.attribute.BasicFileAttributes;
class="kw">import java.util.List;
class="kw">import java.util.Random;
class="kw">import java.util.function.BiFunction;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;
class="kw">public class PrefabCommand class="kw">extends AbstractCommandCollection {
class="kw">public PrefabCommand() {
super("prefab", "server.commands.prefab.desc");
this.addAliases("p");
this.setPermissionGroups("hytale:WorldEditor");
this.addSubCommand(new PrefabCommand.PrefabSaveCommand());
this.addSubCommand(new PrefabCommand.PrefabLoadCommand());
this.addSubCommand(new PrefabCommand.PrefabDeleteCommand());
this.addSubCommand(new PrefabCommand.PrefabListCommand());
}
class="kw">private class="kw">static class PrefabDeleteCommand class="kw">extends CommandBase {
@Nonnull
class="kw">private class="kw">final RequiredArg<String> nameArg = this.withRequiredArg("name", "server.commands.prefab.delete.name.desc", ArgTypes.STRING);
class="kw">public PrefabDeleteCommand() {
super("delete", "server.commands.prefab.delete.desc", true);
this.requirePermission(HytalePermissions.EDITOR_PREFAB_MANAGE);
}
@Override
class="kw">protected void executeSync(@Nonnull CommandContext var1) {
String var2 = this.nameArg.get(var1);
if (!PrefabStore.isPrefabFileName(var2)) {
var2 = var2 + ".prefab.json";
}
PrefabStore var3 = PrefabStore.get();
Path var4 = var3.getServerPrefabsPath();
Path var5 = var4.resolve(var2);
try {
Ref var6 = var1.senderAsPlayerRef();
boolean var7 = false;
if (var6 != null && var6.isValid()) {
Store var8 = var6.getStore();
PlayerRef var9 = var8.getComponent(var6, PlayerRef.getComponentType());
if (var9 != null) {
var7 = SingleplayerModule.isOwner(var9);
}
}
if (!PathUtil.isChildOf(var4, var5) && !var7) {
var1.sendMessage(Message.translation("server.builderTools.attemptedToSaveOutsidePrefabsDir"));
class="kw">return;
}
Path var11 = PathUtil.relativize(var4, var5);
if (var3.deletePrefab(var5)) {
var1.sendMessage(Message.translation("server.builderTools.prefab.deleted").param("name", var11.toString()));
} else {
var1.sendMessage(Message.translation("server.builderTools.prefab.prefabNotFound").param("name", var11.toString()));
}
} catch (IOException var10) {
var1.sendMessage(Message.translation("server.builderTools.prefab.errorOccured").param("reason", var10.getMessage()));
}
}
}
class="kw">private class="kw">static class PrefabListCommand class="kw">extends CommandBase {
@Nonnull
class="kw">private class="kw">final FlagArg textFlag = this.withFlagArg("text", "server.commands.prefab.list.text.desc");
class="kw">public PrefabListCommand() {
super("list", "server.commands.prefab.list.desc");
}
@Override
class="kw">protected void executeSync(@Nonnull CommandContext var1) {
Ref var2 = var1.senderAsPlayerRef();
if (var2 != null && var2.isValid() && !this.textFlag.get(var1)) {
Store var9 = var2.getStore();
World var10 = var9.getExternalData().getWorld();
var10.execute(() -> {
Player var2 = var9.getComponent(var2, Player.getComponentType());
assert var2 != null;
PlayerRef var3 = var9.getComponent(var2, PlayerRef.getComponentType());
assert var3 != null;
BuilderToolsPlugin.BuilderState var4 = BuilderToolsPlugin.getState(var2, var3);
var2.getPageManager().openCustomPage(var2, var9, new PrefabPage(var3, var4));
});
} else {
try {
class="kw">final List var3 = new ObjectArrayList();
for (PrefabStore.AssetPackPrefabPath var5 : PrefabStore.get().getAllBrowsablePrefabPaths()) {
class="kw">final Path var6 = var5.prefabsPath();
class="kw">final String var7 = "[" + var5.getDisplayName() + "] ";
if (Files.isDirectory(var6)) {
Files.walkFileTree(var6, FileUtil.DEFAULT_WALK_TREE_OPTIONS_SET, Integer.MAX_VALUE, new SimpleFileVisitor<Path>() {
@Nonnull
class="kw">public FileVisitResult visitFile(@Nonnull Path var1, @Nonnull BasicFileAttributes var2) {
if (PrefabStore.PREFAB_FILTER.test(var1)) {
var3.add(Message.raw(var7 + PathUtil.relativize(var6, var1)));
}
class="kw">return FileVisitResult.CONTINUE;
}
});
}
}
var1.sendMessage(MessageFormat.list(Message.translation("server.commands.prefab.list.header"), var3));
} catch (IOException var8) {
var1.sendMessage(Message.translation("server.builderTools.prefab.errorListingPrefabs").param("reason", var8.getMessage()));
}
}
}
}
class="kw">private class="kw">static class PrefabLoadByNameCommand class="kw">extends AbstractPlayerCommand {
@Nonnull
class="kw">private class="kw">final RequiredArg<String> nameArg = this.withRequiredArg("name", "server.commands.prefab.load.name.desc", ArgTypes.STRING);
@Nonnull
class="kw">private class="kw">final DefaultArg<String> storeTypeArg = this.withDefaultArg(
"storeType", "server.commands.prefab.load.storeType.desc", ArgTypes.STRING, "asset", "server.commands.prefab.load.storeType.desc"
);
@Nonnull
class="kw">private class="kw">final DefaultArg<String> storeNameArg = this.withDefaultArg("storeName", "server.commands.prefab.load.storeName.desc", ArgTypes.STRING, null, "");
@Nonnull
class="kw">private class="kw">final FlagArg childrenFlag = this.withFlagArg("children", "server.commands.prefab.load.children.desc");
class="kw">public PrefabLoadByNameCommand() {
super("server.commands.prefab.load.desc");
}
@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;
String var7 = this.storeTypeArg.get(var1);
String var8 = this.storeNameArg.get(var1);
String var9 = this.nameArg.get(var1);
if (!PrefabStore.isPrefabFileName(var9)) {
var9 = var9 + ".prefab.json";
}
Path var10 = null;
Path var11 = null;
String var12 = var9;
Function var13 = class="kw">switch (var7) {
case "server" -> {
var10 = PrefabStore.get().getServerPrefabsPath();
yield PrefabStore.get()::getServerPrefab;
}
case "asset" -> {
Path var19 = PrefabStore.get().findAssetPrefabPath(var12);
if (var19 != null) {
var11 = var19;
var10 = var19.getParent();
yield var1x -> PrefabStore.get().getPrefab(var19);
} else {
var10 = PrefabStore.get().getAssetPrefabsPath();
yield PrefabStore.get()::getAssetPrefab;
}
}
case "worldgen" -> {
Path var16 = PrefabStore.get().getWorldGenPrefabsPath(var8);
var10 = PrefabStore.get().getWorldGenPrefabsPath(var8);
yield var1x -> PrefabStore.get().getWorldGenPrefab(var16, var1x);
}
class="kw">default -> {
var1.sendMessage(Message.translation("server.commands.prefab.invalidStoreType").param("storeType", var7));
yield null;
}
};
if (var13 != null) {
Path var18 = var10;
BiFunction var17;
if (this.childrenFlag.get(var1)) {
var17 = new RecursivePrefabLoader.BlockSelectionLoader(var18, var13);
} else {
var17 = (var1x, var2x) -> var13.apply(var1x);
}
boolean var20 = var11 != null && PrefabStore.get().prefabExists(var11) || PrefabStore.get().prefabExists(var10.resolve(var9));
if (var20) {
BuilderToolsPlugin.addToQueue(var6, var4, (var2x, var3x, var4x) -> var3x.load(var12, var17.apply(var12, var3x.getRandom()), var4x));
} else {
var1.sendMessage(Message.translation("server.builderTools.prefab.prefabNotFound").param("name", var9));
}
}
}
}
class="kw">private class="kw">static class PrefabLoadCommand class="kw">extends AbstractPlayerCommand {
class="kw">public PrefabLoadCommand() {
super("load", "server.commands.prefab.load.desc");
this.requirePermission(HytalePermissions.EDITOR_PREFAB_USE);
this.addUsageVariant(new PrefabCommand.PrefabLoadByNameCommand());
}
@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;
BuilderToolsPlugin.BuilderState var7 = BuilderToolsPlugin.getState(var6, var4);
var6.getPageManager().openCustomPage(var3, var2, new PrefabPage(var4, var7));
}
}
class="kw">private class="kw">static class PrefabSaveCommand class="kw">extends AbstractPlayerCommand {
class="kw">private class="kw">static class="kw">final Message MESSAGE_NO_SELECTION = Message.translation("server.builderTools.noSelection");
class="kw">public PrefabSaveCommand() {
super("save", "server.commands.prefab.save.desc");
this.requirePermission(HytalePermissions.EDITOR_PREFAB_MANAGE);
this.addUsageVariant(new PrefabCommand.PrefabSaveDirectCommand());
}
@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;
BuilderToolsPlugin.BuilderState var7 = BuilderToolsPlugin.getState(var6, var4);
BlockSelection var8 = var7.getSelection();
if (var8 != null && var8.hasSelectionBounds()) {
var6.getPageManager().openCustomPage(var3, var2, new PrefabSavePage(var4));
} else {
var1.sendMessage(MESSAGE_NO_SELECTION);
}
}
}
class="kw">private class="kw">static class PrefabSaveDirectCommand class="kw">extends AbstractPlayerCommand {
@Nonnull
class="kw">private class="kw">final RequiredArg<String> nameArg = this.withRequiredArg("name", "server.commands.prefab.save.name.desc", ArgTypes.STRING);
@Nonnull
class="kw">private class="kw">final FlagArg overwriteFlag = this.withFlagArg("overwrite", "server.commands.prefab.save.overwrite.desc");
@Nonnull
class="kw">private class="kw">final FlagArg entitiesFlag = this.withFlagArg("entities", "server.commands.prefab.save.entities.desc");
@Nonnull
class="kw">private class="kw">final FlagArg emptyFlag = this.withFlagArg("empty", "server.commands.prefab.save.empty.desc");
@Nonnull
class="kw">private class="kw">final FlagArg playerAnchorFlag = this.withFlagArg("playerAnchor", "server.commands.prefab.save.playerAnchor.desc");
@Nonnull
class="kw">private class="kw">final FlagArg removeSupportFlag = this.withFlagArg("removeSupport", "server.commands.editprefab.save.removeSupport.desc");
@Nonnull
class="kw">private class="kw">final FlagArg setupSupportFlag = this.withFlagArg("setupSupport", "server.commands.editprefab.save.setupSupport.desc");
@Nonnull
class="kw">private class="kw">final DefaultArg<String> packArg = this.withDefaultArg(
"pack", "server.commands.prefab.save.pack.desc", ArgTypes.STRING, "", "server.commands.prefab.save.pack.desc"
);
@Nonnull
class="kw">private class="kw">final FlagArg compressedFlag = this.withFlagArg("compressed", "server.commands.prefab.save.compressed.desc");
class="kw">public PrefabSaveDirectCommand() {
super("server.commands.prefab.save.desc");
}
@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;
String var7 = this.packArg.get(var1);
AssetPack var8 = BuilderToolsPlugin.resolveTargetPack(var7 != null ? var7 : "", var6, var1);
if (var8 != null) {
BuilderToolsUserData.get(var6).setLastSavePack(var8.getName());
String var9 = this.nameArg.get(var1).trim();
if (var9.isBlank()) {
var1.sendMessage(Message.translation("server.builderTools.prefabSave.nameRequired"));
} else if (var9.contains("..")) {
var1.sendMessage(Message.translation("server.builderTools.attemptedToSaveOutsidePrefabsDir"));
} else {
boolean var10 = this.overwriteFlag.get(var1);
boolean var11 = this.entitiesFlag.get(var1);
boolean var12 = this.emptyFlag.get(var1);
boolean var13 = this.removeSupportFlag.get(var1);
boolean var14 = this.setupSupportFlag.get(var1);
SupportMode var15 = SupportMode.KEEP_EXISTING;
if (var14) {
var15 = SupportMode.CALCULATE;
} else if (var13) {
var15 = SupportMode.REMOVE;
}
SupportMode var16 = var15;
Vector3i var17 = this.getPlayerAnchor(var3, var2, this.playerAnchorFlag.get(var1));
PrefabFormat var18 = this.compressedFlag.get(var1) ? PrefabFormat.COMPRESSED : PrefabFormat.AUTO;
BuilderToolsPlugin.addToQueue(
var6, var4, (var8x, var9x, var10x) -> var9x.saveFromSelection(var8x, var9, true, var10, var11, var12, var17, var16, var8, var18, var10x)
);
}
}
}
@Nullable
class="kw">private Vector3i getPlayerAnchor(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, boolean var3) {
if (!var3) {
class="kw">return null;
}
TransformComponent var4 = var2.getComponent(var1, TransformComponent.getComponentType());
if (var4 == null) {
class="kw">return null;
}
Vector3d var5 = var4.getPosition();
class="kw">return new Vector3i(MathUtil.floor(var5.x()), MathUtil.floor(var5.y()), MathUtil.floor(var5.z()));
}
}
}