PrefabEditSaveCommand class
Пакет: com.hypixel.hytale.builtin.buildertools.prefabeditor.commands
Файл: com/hypixel/hytale/builtin/buildertools/prefabeditor/commands/PrefabEditSaveCommand.java
extends: AbstractAsyncPlayerCommand
Поля (37)
| Модификаторы | Тип | Имя |
|---|---|---|
|
PrefabStore |
var1 |
|
boolean |
var10 |
|
boolean |
var11 |
|
boolean |
var12 |
|
boolean |
var13 |
|
|
var13 |
|
|
var13 |
|
String |
var14 |
|
AssetPack |
var15 |
|
|
var15 |
|
|
var15 |
|
|
var15 |
|
PrefabEditingMetadata[] |
var16 |
|
int |
var17 |
|
AssetModule |
var2 |
|
PrefabStore |
var2 |
|
Path |
var22 |
|
PrefabEditingMetadata |
var23 |
|
BlockSelection |
var24 |
|
Path |
var25 |
|
CompletableFuture[] |
var27 |
|
Path |
var28 |
|
Path |
var3 |
|
AssetPack |
var31 |
|
|
var31 |
|
PrefabEditingMetadata |
var33 |
|
AssetPack |
var34 |
|
Path |
var36 |
|
List |
var4 |
|
boolean |
var5 |
|
Player |
var6 |
|
String |
var6 |
|
PrefabEditSessionManager |
var7 |
|
Message |
var7 |
|
|
var7 |
|
PrefabEditSession |
var8 |
|
PrefabSaverSettings |
var9 |
Методы (22)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(PrefabEditingMetadata var21 : var16) |
|
|
for for(PrefabEditingMetadata var35 : var16) |
|
|
for for(int var30 = 0; var30 < var16.length; var30++) |
|
|
for for(int var5 = 0; var5 < var27.length; var5++) |
|
|
if if(var8 == null) |
|
|
if if(var11) |
|
|
if if(var15 == null) |
|
|
if if(var23 == null) |
|
|
if if(var15 == null) |
|
|
if if(!var12) |
|
|
if if(var15 != null) |
|
|
if if(var31 == null) |
|
|
if if(var5) |
|
|
if if(var34 != null) |
|
|
if if(var17 > 0 && !var13) |
|
|
if if(var15 == null) |
|
|
if if(var15 == null) |
|
|
if if(!var12) |
|
|
if if(var15 != null) |
|
|
if if(var1 != null) |
static |
boolean |
isPathInAllowedPrefabDirectoryboolean isPathInAllowedPrefabDirectory(@Nonnull Path var0) |
abstract |
|
super super("save", "server.commands.editprefab.save.desc") |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.prefabeditor.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.PrefabEditSession;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.PrefabEditSessionManager;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.PrefabEditingMetadata;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.saving.PrefabSaver;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.saving.PrefabSaverSettings;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.saving.SupportMode;
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.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.AssetModule;
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.types.ArgTypes;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractAsyncPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.modules.singleplayer.SingleplayerModule;
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 it.unimi.dsi.fastutil.ints.IntArrayList;
class="kw">import java.nio.file.Path;
class="kw">import java.util.List;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class PrefabEditSaveCommand class="kw">extends AbstractAsyncPlayerCommand {
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_EDIT_PREFAB_NOT_IN_EDIT_SESSION = Message.translation("server.commands.editprefab.notInEditSession");
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_PATH_OUTSIDE_PREFABS_DIR = Message.translation("server.builderTools.attemptedToSaveOutsidePrefabsDir");
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_NOT_IN_EDIT_WORLD = Message.translation("server.commands.editprefab.notInEditWorldWarning");
@Nonnull
class="kw">private class="kw">final FlagArg saveAllArg = this.withFlagArg("saveAll", "server.commands.editprefab.save.saveAll.desc").addAliases("all");
@Nonnull
class="kw">private class="kw">final DefaultArg<String> packArg = this.withDefaultArg(
"pack", "server.commands.editprefab.save.pack.desc", ArgTypes.STRING, "", "server.commands.editprefab.save.pack.desc"
);
@Nonnull
class="kw">private class="kw">final FlagArg noEntitiesArg = this.withFlagArg("noEntities", "server.commands.editprefab.save.noEntities.desc");
@Nonnull
class="kw">private class="kw">final FlagArg emptyArg = this.withFlagArg("empty", "server.commands.editprefab.save.empty.desc");
@Nonnull
class="kw">private class="kw">final FlagArg confirmArg = this.withFlagArg("confirm", "server.commands.editprefab.save.confirm.desc");
@Nonnull
class="kw">private class="kw">final FlagArg removeSupportArg = this.withFlagArg("removeSupport", "server.commands.editprefab.save.removeSupport.desc");
@Nonnull
class="kw">private class="kw">final FlagArg setupSupportArg = this.withFlagArg("setupSupport", "server.commands.editprefab.save.setupSupport.desc");
@Nonnull
class="kw">private class="kw">final FlagArg compressedArg = this.withFlagArg("compressed", "server.commands.editprefab.save.compressed.desc");
class="kw">private class="kw">static boolean isPathInAllowedPrefabDirectory(@Nonnull Path var0) {
PrefabStore var1 = PrefabStore.get();
if (PathUtil.isChildOf(var1.getServerPrefabsPath(), var0)) {
class="kw">return true;
}
if (PathUtil.isChildOf(var1.getWorldGenPrefabsPath(), var0)) {
class="kw">return true;
}
AssetModule var2 = AssetModule.get();
class="kw">return var2.isWithinPackSubDir(var0, "Server/Prefabs") && !var2.isAssetPathImmutable(var0);
}
class="kw">public PrefabEditSaveCommand() {
super("save", "server.commands.editprefab.save.desc");
}
@Nonnull
@Override
class="kw">protected CompletableFuture<Void> executeAsync(
@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;
PrefabEditSessionManager var7 = BuilderToolsPlugin.get().getPrefabEditSessionManager();
PrefabEditSession var8 = var7.getPrefabEditSession(var4.getUuid());
if (var8 == null) {
var1.sendMessage(MESSAGE_COMMANDS_EDIT_PREFAB_NOT_IN_EDIT_SESSION);
class="kw">return CompletableFuture.completedFuture(null);
}
if (!var7.isInEditWorld(var4, var2)) {
var1.sendMessage(MESSAGE_NOT_IN_EDIT_WORLD);
class="kw">return CompletableFuture.completedFuture(null);
}
PrefabSaverSettings var9 = new PrefabSaverSettings();
var9.setBlocks(true);
var9.setEntities(!this.noEntitiesArg.provided(var1));
var9.setOverwriteExisting(true);
var9.setEmpty(this.emptyArg.get(var1));
var9.setPrefabFormat(this.compressedArg.get(var1) ? PrefabFormat.COMPRESSED : PrefabFormat.AUTO);
boolean var10 = this.removeSupportArg.get(var1);
boolean var11 = this.setupSupportArg.get(var1);
if (var11) {
var9.setSupportMode(SupportMode.CALCULATE);
} else if (var10) {
var9.setSupportMode(SupportMode.REMOVE);
}
boolean var12 = this.confirmArg.provided(var1);
String var14 = this.packArg.get(var1);
AssetPack var15 = null;
boolean var13;
if (var14 != null && !var14.isEmpty()) {
var15 = BuilderToolsPlugin.resolveTargetPack(var14, var6, var1);
if (var15 == null) {
class="kw">return CompletableFuture.completedFuture(null);
}
var13 = true;
} else {
var13 = false;
}
if (!this.saveAllArg.provided(var1)) {
PrefabEditingMetadata var23 = var8.getSelectedPrefab(var4.getUuid());
if (var23 == null) {
var1.sendMessage(Message.translation("server.commands.editprefab.noPrefabSelected"));
class="kw">return CompletableFuture.completedFuture(null);
}
if (var23.isReadOnly() && !var13) {
var15 = BuilderToolsPlugin.resolveTargetPack("", var23.getPrefabPath(), var6, var1);
if (var15 == null) {
class="kw">return CompletableFuture.completedFuture(null);
}
if (!var12) {
Path var25 = getWritableSavePath(var23, var15);
var1.sendMessage(
Message.translation("server.commands.editprefab.save.readOnlyNeedsConfirmSingle")
.param("path", var23.getPrefabPath().toString())
.param("redirectPath", var25.toString())
);
class="kw">return CompletableFuture.completedFuture(null);
}
}
BlockSelection var24 = BuilderToolsPlugin.getState(var6, var4).getSelection();
if (var23.getMinPoint().equals(var24.getSelectionMin()) && var23.getMaxPoint().equals(var24.getSelectionMax())) {
if (var15 != null) {
BuilderToolsUserData.get(var6).setLastSavePack(var15.getName());
}
Path var28 = getWritableSavePath(var23, var15);
if (!SingleplayerModule.isOwner(var4) && !isPathInAllowedPrefabDirectory(var28)) {
var1.sendMessage(MESSAGE_PATH_OUTSIDE_PREFABS_DIR);
class="kw">return CompletableFuture.completedFuture(null);
}
AssetPack var31 = var15;
if (var31 == null) {
var31 = PrefabStore.get().findAssetPackForPrefabPath(var28);
}
AssetPack var34 = var31;
class="kw">return PrefabSaver.savePrefab(
var4,
var5,
var28,
var23.getAnchorPoint(),
var23.getMinPoint(),
var23.getMaxPoint(),
var23.getPastePosition(),
var23.getOriginalFileAnchor(),
var9
)
.thenAccept(var4x -> {
boolean var5 = var4x != null;
if (var5) {
var23.setDirty(false);
}
String var6 = (var5 ? "success" : "failure") + (var34 != null ? ".pack" : "");
Message var7 = Message.translation("server.commands.editprefab.save." + var6).param("name", (var5 ? var4x : var28).toString());
if (var34 != null) {
var7 = var7.param("pack", var34.getName());
}
var1.sendMessage(var7);
});
} else {
var1.sendMessage(Message.translation("server.commands.editprefab.save.selectionMismatch"));
class="kw">return CompletableFuture.completedFuture(null);
}
} else {
PrefabEditingMetadata[] var16 = var8.getLoadedPrefabMetadata().values().toArray(new PrefabEditingMetadata[0]);
int var17 = 0;
for (PrefabEditingMetadata var21 : var16) {
if (var21.isReadOnly()) {
var17++;
}
}
if (var17 > 0 && !var13) {
if (var15 == null) {
var15 = BuilderToolsPlugin.resolveTargetPack("", var6, var1);
if (var15 == null) {
class="kw">return CompletableFuture.completedFuture(null);
}
}
if (!var12) {
var1.sendMessage(Message.translation("server.commands.editprefab.save.readOnlyNeedsConfirm").param("count", var17));
class="kw">return CompletableFuture.completedFuture(null);
}
}
if (var15 != null) {
BuilderToolsUserData.get(var6).setLastSavePack(var15.getName());
}
if (!SingleplayerModule.isOwner(var4)) {
for (PrefabEditingMetadata var35 : var16) {
Path var22 = getWritableSavePath(var35, var15);
if (!isPathInAllowedPrefabDirectory(var22)) {
var1.sendMessage(MESSAGE_PATH_OUTSIDE_PREFABS_DIR);
class="kw">return CompletableFuture.completedFuture(null);
}
}
}
var1.sendMessage(Message.translation("server.commands.editprefab.save.saveAll.start").param("amount", var16.length));
CompletableFuture[] var27 = new CompletableFuture[var16.length];
for (int var30 = 0; var30 < var16.length; var30++) {
PrefabEditingMetadata var33 = var16[var30];
Path var36 = getWritableSavePath(var33, var15);
var27[var30] = PrefabSaver.savePrefab(
var4,
var5,
var36,
var33.getAnchorPoint(),
var33.getMinPoint(),
var33.getMaxPoint(),
var33.getPastePosition(),
var33.getOriginalFileAnchor(),
var9
);
}
class="kw">return CompletableFuture.allOf(var27)
.thenAccept(
var3x -> {
List var4 = new IntArrayList();
for (int var5 = 0; var5 < var27.length; var5++) {
if (var27[var5].join() != null) {
var16[var5].setDirty(false);
} else {
var4.add(var5);
}
}
var1.sendMessage(
Message.translation("server.commands.editprefab.save.saveAll.success")
.param("successes", var27.length - var4.size())
.param("failures", var4.size())
);
}
);
}
}
@Nonnull
class="kw">private class="kw">static Path getWritableSavePath(@Nonnull PrefabEditingMetadata var0, @Nullable AssetPack var1) {
if (var1 != null) {
PrefabStore var2 = PrefabStore.get();
Path var3 = var2.getAssetPrefabsPathForPack(var1);
class="kw">return var3.resolve(var2.getRelativePrefabPath(var0.getPrefabPath()));
} else {
class="kw">return var0.getPrefabPath();
}
}
}