AssetSpecificFunctionality class

Пакет: com.hypixel.hytale.builtin.asseteditor

Файл: com/hypixel/hytale/builtin/asseteditor/AssetSpecificFunctionality.java

Поля (109)

МодификаторыТипИмя
final Message NO_GAME_CLIENT_MESSAGE
break
private boolean keepPreview
return
return
PlayerRef var1
Map var1
Map var1
AssetPath var1
AssetPath var1
AssetPath var1
AssetSpecificFunctionality.PlayerPreviewData var1
EditorClient var1
CustomModelTexture[] var1
ObjectArrayList var1
ObjectArrayList var1
ItemModule var1
AssetEditorPlugin var1
String var1
Model var1
AssetEditorUpdateModelPreview var10
AssetEditorUpdateModelPreview var10
String var10
UpdateEditorTimeOverride var10
Item var10
JsonUpdateCommand var11
boolean var11
JsonUpdateCommand[] var12
AssetUpdateQuery.RebuildCache var2
PlayerRef var2
PlayerRef var2
AssetPath var2
String var2
PlayerRef var2
String var2
String var2
EditorClient var2
Ref var2
String var2
AssetIconProperties var2
var2
Ref var3
Message var3
Ref var3
String var3
BlockTypeTextures var3
Ref var3
PlayerRef var3
Store var3
PlayerRef var3
PlayerRef var3
ModelAsset var3
AssetIconProperties var3
Store var4
Store var4
String var4
Item var4
BlockTypeTextures[] var4
Store var4
String var4
UUID var4
World var4
AssetSpecificFunctionality.PlayerPreviewData var4
AssetSpecificFunctionality.PlayerPreviewData var4
Model var4
AssetEditorPreviewCameraSettings var4
World var5
World var5
Item var5
BlockTypeAssetMap var5
World var5
ModelAsset var5
Set var5
Player var5
AssetStore var5
AssetEditorUpdateModelPreview var5
Vector2f var5
Path var6
ItemArmor var6
BlockType var6
com.hypixel.hytale.server.core.asset.type.model.config.Model var6
AssetPath var6
WorldTimeResource var6
String var6
AssetPath var6
Vector3f var6
AssetTypeHandler var7
Path var7
CombinedItemContainer var7
String var7
Message var7
AssetTypeHandler var7
PacketHandler var7
int var7
String var7
BlockType var7
String var8
AssetTypeHandler var8
InventoryComponent.Armor var8
AssetPack var8
AssetEditorUpdateSecondsPerGameDay var8
String var8
Model var8
Model var9
String var9
Path var9
Instant var9
boolean var9
private Path weatherAssetPath

Методы (52)

МодификаторыВозвратСигнатура
public PlayerPreviewDatapublic PlayerPreviewData()
static void equipItemvoid equipItem(@Nonnull Path var0, @Nonnull EditorClient var1)
static AssetEditorUpdateModelPreview getModelPreviewPacketForItemAssetEditorUpdateModelPreview getModelPreviewPacketForItem(@Nonnull AssetPath var0, @Nullable Item var1)
static void handleWeatherOrEnvironmentSelectedvoid handleWeatherOrEnvironmentSelected(@Nonnull EditorClient var0, @Nonnull Path var1, boolean var2)
static void handleWeatherOrEnvironmentUnselectedvoid handleWeatherOrEnvironmentUnselected(@Nonnull EditorClient var0, @Nonnull Path var1, boolean var2)
if if(var1 == null)
if if(var10 != null)
if if(var2 != null)
if if(var4 != null)
if if(var5 == null)
if if(var6 != null)
if if(var8 != null)
if if(var6 == null)
if if(var7 != null)
if if(var10 == null)
if if(var1 != null && var1.length > 0)
if if(var4 != null && var4.length > 0)
if if(var2 != null)
if if(var5 == null)
if if(var3 != null)
if if(var3 != null)
if if(var3 != null)
if if(!var4.keepPreview)
if if(var2)
if if(var3 != null)
if if(!var4.keepPreview)
if if(var2)
if if(var3 != null)
if if(var10 != null)
if if(var5 != null)
if if(var1 == null)
if if(var2 == null)
if if(var7 != null)
static void onClientDisconnectedvoid onClientDisconnected(@Nonnull AssetEditorClientDisconnectEvent var0)
static void onEquipItemvoid onEquipItem(@Nonnull AssetEditorActivateButtonEvent var0)
static void onItemAssetCreatedvoid onItemAssetCreated(@Nonnull AssetEditorAssetCreatedEvent var0)
static void onItemAssetLoadedvoid onItemAssetLoaded(@Nonnull LoadedAssetsEvent<String, Item, ?> var0)
static void onModelAssetCreatedvoid onModelAssetCreated(@Nonnull AssetEditorAssetCreatedEvent var0)
static void onModelAssetLoadedvoid onModelAssetLoaded(@Nonnull LoadedAssetsEvent<String, ModelAsset, ?> var0)
static void onRecomputeTextureColorvoid onRecomputeTextureColor(@Nonnull AssetEditorActivateButtonEvent var0)
static void onRequestBlockGroupsDataSetvoid onRequestBlockGroupsDataSet(@Nonnull AssetEditorFetchAutoCompleteDataEvent var0)
static void onRequestItemCategoriesDataSetvoid onRequestItemCategoriesDataSet(@Nonnull AssetEditorRequestDataSetEvent var0)
static void onRequestLocalizationKeyDataSetvoid onRequestLocalizationKeyDataSet(@Nonnull AssetEditorFetchAutoCompleteDataEvent var0)
static void onResetModelvoid onResetModel(@Nonnull AssetEditorActivateButtonEvent var0)
static void onSelectAssetvoid onSelectAsset(@Nonnull AssetEditorSelectAssetEvent var0)
static void onUpdateWeatherPreviewLockEventvoid onUpdateWeatherPreviewLockEvent(@Nonnull AssetEditorUpdateWeatherPreviewLockEvent var0)
static void onUseModelvoid onUseModel(@Nonnull AssetEditorActivateButtonEvent var0)
static void recomputeTextureColorvoid recomputeTextureColor(@Nonnull Path var0, @Nonnull EditorClient var1)
static void resetTimeSettingsvoid resetTimeSettings(@Nonnull EditorClient var0, @Nonnull PlayerRef var1)
abstract resetTimeSettings resetTimeSettings(var0, var3)
static void setupvoid setup()
static void useModelvoid useModel(@Nonnull Path var0, @Nonnull EditorClient var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.asseteditor;

class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.assetstore.AssetStore;
class="kw">import com.hypixel.hytale.assetstore.AssetUpdateQuery;
class="kw">import com.hypixel.hytale.assetstore.event.LoadedAssetsEvent;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.builtin.asseteditor.assettypehandler.AssetStoreTypeHandler;
class="kw">import com.hypixel.hytale.builtin.asseteditor.assettypehandler.AssetTypeHandler;
class="kw">import com.hypixel.hytale.builtin.asseteditor.event.AssetEditorActivateButtonEvent;
class="kw">import com.hypixel.hytale.builtin.asseteditor.event.AssetEditorAssetCreatedEvent;
class="kw">import com.hypixel.hytale.builtin.asseteditor.event.AssetEditorClientDisconnectEvent;
class="kw">import com.hypixel.hytale.builtin.asseteditor.event.AssetEditorFetchAutoCompleteDataEvent;
class="kw">import com.hypixel.hytale.builtin.asseteditor.event.AssetEditorRequestDataSetEvent;
class="kw">import com.hypixel.hytale.builtin.asseteditor.event.AssetEditorSelectAssetEvent;
class="kw">import com.hypixel.hytale.builtin.asseteditor.event.AssetEditorUpdateWeatherPreviewLockEvent;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.event.EventRegistry;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.InstantData;
class="kw">import com.hypixel.hytale.protocol.Model;
class="kw">import com.hypixel.hytale.protocol.packets.asseteditor.AssetEditorJsonAssetUpdated;
class="kw">import com.hypixel.hytale.protocol.packets.asseteditor.AssetEditorPopupNotificationType;
class="kw">import com.hypixel.hytale.protocol.packets.asseteditor.AssetEditorPreviewCameraSettings;
class="kw">import com.hypixel.hytale.protocol.packets.asseteditor.AssetEditorUpdateModelPreview;
class="kw">import com.hypixel.hytale.protocol.packets.asseteditor.AssetEditorUpdateSecondsPerGameDay;
class="kw">import com.hypixel.hytale.protocol.packets.asseteditor.JsonUpdateCommand;
class="kw">import com.hypixel.hytale.protocol.packets.asseteditor.JsonUpdateType;
class="kw">import com.hypixel.hytale.protocol.packets.world.ClearEditorTimeOverride;
class="kw">import com.hypixel.hytale.protocol.packets.world.UpdateEditorTimeOverride;
class="kw">import com.hypixel.hytale.protocol.packets.world.UpdateEditorWeatherOverride;
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.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockTypeTextures;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.CustomModelTexture;
class="kw">import com.hypixel.hytale.server.core.asset.type.environment.config.Environment;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.AssetIconProperties;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.ItemArmor;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.ModelAsset;
class="kw">import com.hypixel.hytale.server.core.asset.type.weather.config.Weather;
class="kw">import com.hypixel.hytale.server.core.asset.util.ColorParseUtil;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.container.CombinedItemContainer;
class="kw">import com.hypixel.hytale.server.core.io.PacketHandler;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.player.PlayerSkinComponent;
class="kw">import com.hypixel.hytale.server.core.modules.i18n.I18nModule;
class="kw">import com.hypixel.hytale.server.core.modules.item.ItemModule;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.PlayerUtil;
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.objects.ObjectArrayList;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.time.Instant;
class="kw">import java.util.Locale;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector2f;
class="kw">import org.joml.Vector3f;

@Deprecated
class="kw">public class AssetSpecificFunctionality {
   class="kw">private class="kw">static class="kw">final Message NO_GAME_CLIENT_MESSAGE = Message.translation("server.assetEditor.messages.noGameClient");
   class="kw">private class="kw">static class="kw">final ClearEditorTimeOverride CLEAR_EDITOR_TIME_OVERRIDE_PACKET = new ClearEditorTimeOverride();
   class="kw">private class="kw">static class="kw">final UpdateEditorWeatherOverride CLEAR_WEATHER_OVERRIDE_PACKET = new UpdateEditorWeatherOverride(0);
   class="kw">private class="kw">static class="kw">final String MODEL_ASSET_ID = ModelAsset.class.getSimpleName();
   class="kw">private class="kw">static class="kw">final String ITEM_ASSET_ID = Item.class.getSimpleName();
   class="kw">private class="kw">static class="kw">final String WEATHER_ASSET_ID = Weather.class.getSimpleName();
   class="kw">private class="kw">static class="kw">final String ENVIRONMENT_ASSET_ID = Environment.class.getSimpleName();
   class="kw">private class="kw">static class="kw">final Map<UUID, AssetSpecificFunctionality.PlayerPreviewData> activeWeatherPreviewMapping = new ConcurrentHashMap<>();
   class="kw">private class="kw">static class="kw">final AssetEditorPreviewCameraSettings DEFAULT_PREVIEW_CAMERA_SETTINGS = new AssetEditorPreviewCameraSettings(
      0.25F, new Vector3f(0.0F, 75.0F, 0.0F), new Vector3f(0.0F, (float)Math.toRadians(45.0), 0.0F)
   );

   class="kw">public AssetSpecificFunctionality() {
   }

   class="kw">public class="kw">static void setup() {
      getEventRegistry().register(LoadedAssetsEvent.class, ModelAsset.class, AssetSpecificFunctionality::onModelAssetLoaded);
      getEventRegistry().register(LoadedAssetsEvent.class, Item.class, AssetSpecificFunctionality::onItemAssetLoaded);
      getEventRegistry().register(AssetEditorActivateButtonEvent.class, "EquipItem", AssetSpecificFunctionality::onEquipItem);
      getEventRegistry().register(AssetEditorActivateButtonEvent.class, "RecomputeTextureColor", AssetSpecificFunctionality::onRecomputeTextureColor);
      getEventRegistry().register(AssetEditorActivateButtonEvent.class, "UseModel", AssetSpecificFunctionality::onUseModel);
      getEventRegistry().register(AssetEditorActivateButtonEvent.class, "ResetModel", AssetSpecificFunctionality::onResetModel);
      getEventRegistry().register(AssetEditorUpdateWeatherPreviewLockEvent.class, AssetSpecificFunctionality::onUpdateWeatherPreviewLockEvent);
      getEventRegistry().register(AssetEditorAssetCreatedEvent.class, ITEM_ASSET_ID, AssetSpecificFunctionality::onItemAssetCreated);
      getEventRegistry().register(AssetEditorAssetCreatedEvent.class, MODEL_ASSET_ID, AssetSpecificFunctionality::onModelAssetCreated);
      getEventRegistry().register(AssetEditorFetchAutoCompleteDataEvent.class, "BlockGroups", AssetSpecificFunctionality::onRequestBlockGroupsDataSet);
      getEventRegistry().register(AssetEditorFetchAutoCompleteDataEvent.class, "LocalizationKeys", AssetSpecificFunctionality::onRequestLocalizationKeyDataSet);
      getEventRegistry().register(AssetEditorRequestDataSetEvent.class, "ItemCategories", AssetSpecificFunctionality::onRequestItemCategoriesDataSet);
      getEventRegistry().registerGlobal(AssetEditorSelectAssetEvent.class, AssetSpecificFunctionality::onSelectAsset);
      getEventRegistry().registerGlobal(AssetEditorClientDisconnectEvent.class, AssetSpecificFunctionality::onClientDisconnected);
   }

   @Nullable
   class="kw">private class="kw">static PlayerRef tryGetPlayer(@Nonnull EditorClient var0) {
      PlayerRef var1 = var0.tryGetPlayer();
      if (var1 == null) {
         var0.sendPopupNotification(AssetEditorPopupNotificationType.Warning, NO_GAME_CLIENT_MESSAGE);
         class="kw">return null;
      } else {
         class="kw">return var1;
      }
   }

   class="kw">private class="kw">static void onModelAssetLoaded(@Nonnull LoadedAssetsEvent<String, ModelAsset, ?> var0) {
      if (!var0.isInitial()) {
         Map var1 = AssetEditorPlugin.get().getClientOpenAssetPathMapping();
         if (!var1.isEmpty()) {
            for (ModelAsset var3 : var0.getLoadedAssets().values()) {
               for (Entry var5 : var1.entrySet()) {
                  Path var6 = var5.getValue().path();
                  if (!var6.toString().isEmpty()) {
                     AssetTypeHandler var7 = AssetEditorPlugin.get().getAssetTypeRegistry().getAssetTypeHandlerForPath(var6);
                     if (var7 class="kw">instanceof AssetStoreTypeHandler && ((AssetStoreTypeHandler)var7).getAssetStore().getAssetClass().equals(ModelAsset.class)) {
                        String var8 = ModelAsset.getAssetStore().decodeFilePathKey(var6);
                        if (var3.getId().equals(var8)) {
                           Model var9 = com.hypixel.hytale.server.core.asset.type.model.config.Model.createUnitScaleModel(var3).toPacket();
                           AssetEditorUpdateModelPreview var10 = new AssetEditorUpdateModelPreview(
                              var5.getValue().toPacket(), var9, null, DEFAULT_PREVIEW_CAMERA_SETTINGS
                           );
                           var5.getKey().getPacketHandler().write(var10);
                        }
                     }
                  }
               }
            }
         }
      }
   }

   class="kw">private class="kw">static void onItemAssetLoaded(@Nonnull LoadedAssetsEvent<String, Item, ?> var0) {
      if (!var0.isInitial()) {
         Map var1 = AssetEditorPlugin.get().getClientOpenAssetPathMapping();
         if (!var1.isEmpty()) {
            AssetUpdateQuery.RebuildCache var2 = var0.getQuery().getRebuildCache();
            if (var2.isBlockTextures() || var2.isModelTextures() || var2.isItemIcons() || var2.isModels()) {
               for (Item var4 : var0.getLoadedAssets().values()) {
                  for (Entry var6 : var1.entrySet()) {
                     Path var7 = var6.getValue().path();
                     if (!var7.toString().isEmpty()) {
                        AssetTypeHandler var8 = AssetEditorPlugin.get().getAssetTypeRegistry().getAssetTypeHandlerForPath(var7);
                        if (var8 class="kw">instanceof AssetStoreTypeHandler && ((AssetStoreTypeHandler)var8).getAssetStore().getAssetClass().equals(Item.class)) {
                           String var9 = Item.getAssetStore().decodeFilePathKey(var7);
                           if (var4.getId().equals(var9)) {
                              AssetEditorUpdateModelPreview var10 = getModelPreviewPacketForItem(var6.getValue(), var4);
                              if (var10 != null) {
                                 var6.getKey().getPacketHandler().write(var10);
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }

   class="kw">private class="kw">static void onItemAssetCreated(@Nonnull AssetEditorAssetCreatedEvent var0) {
      if ("EquipItem".equals(var0.getButtonId())) {
         equipItem(var0.getAssetPath(), var0.getEditorClient());
      }
   }

   class="kw">private class="kw">static void onModelAssetCreated(@Nonnull AssetEditorAssetCreatedEvent var0) {
      if ("UseModel".equals(var0.getButtonId())) {
         useModel(var0.getAssetPath(), var0.getEditorClient());
      }
   }

   class="kw">private class="kw">static void onEquipItem(@Nonnull AssetEditorActivateButtonEvent var0) {
      AssetPath var1 = AssetEditorPlugin.get().getOpenAssetPath(var0.getEditorClient());
      if (var1 != null && !var1.path().toString().isEmpty()) {
         equipItem(var1.path(), var0.getEditorClient());
      }
   }

   class="kw">private class="kw">static void onRecomputeTextureColor(@Nonnull AssetEditorActivateButtonEvent var0) {
      AssetPath var1 = AssetEditorPlugin.get().getOpenAssetPath(var0.getEditorClient());
      if (var1 != null && !var1.path().toString().isEmpty()) {
         recomputeTextureColor(var1.path(), var0.getEditorClient());
      }
   }

   class="kw">private class="kw">static void onUseModel(@Nonnull AssetEditorActivateButtonEvent var0) {
      AssetPath var1 = AssetEditorPlugin.get().getOpenAssetPath(var0.getEditorClient());
      if (var1 != null && !var1.path().toString().isEmpty()) {
         useModel(var1.path(), var0.getEditorClient());
      }
   }

   class="kw">private class="kw">static void onUpdateWeatherPreviewLockEvent(@Nonnull AssetEditorUpdateWeatherPreviewLockEvent var0) {
      AssetSpecificFunctionality.PlayerPreviewData var1 = activeWeatherPreviewMapping.computeIfAbsent(
         var0.getEditorClient().getUuid(), var0x -> new AssetSpecificFunctionality.PlayerPreviewData()
      );
      var1.keepPreview = var0.isLocked();
   }

   class="kw">private class="kw">static void onResetModel(@Nonnull AssetEditorActivateButtonEvent var0) {
      EditorClient var1 = var0.getEditorClient();
      PlayerRef var2 = tryGetPlayer(var1);
      if (var2 != null) {
         Ref var3 = var2.getReference();
         if (var3 != null && var3.isValid()) {
            Store var4 = var3.getStore();
            World var5 = var4.getExternalData().getWorld();
            var5.execute(() -> {
               if (!var4.getArchetype(var3).contains(PlayerSkinComponent.getComponentType())) {
                  Message var3 = Message.translation("server.assetEditor.messages.model.noAuthSkinForPlayer").param("model", "Player");
                  var1.sendPopupNotification(AssetEditorPopupNotificationType.Error, var3);
               } else {
                  PlayerUtil.resetPlayerModel(var3, var4);
               }
            });
         }
      }
   }

   class="kw">private class="kw">static void equipItem(@Nonnull Path var0, @Nonnull EditorClient var1) {
      PlayerRef var2 = tryGetPlayer(var1);
      if (var2 != null && var2.isValid()) {
         Ref var3 = var2.getReference();
         if (var3 != null && var3.isValid()) {
            Store var4 = var3.getStore();
            World var5 = var4.getExternalData().getWorld();
            var5.execute(
               () -> {
                  String var4 = Item.getAssetStore().decodeFilePathKey(var0);
                  if (var4 != null) {
                     Item var5 = Item.getAssetMap().getAsset(var4);
                     if (var5 == null) {
                        var1.sendPopupNotification(
                           AssetEditorPopupNotificationType.Error, Message.translation("server.assetEditor.messages.unknownItem").param("id", var4)
                        );
                     } else {
                        ItemArmor var6 = var5.getArmor();
                        if (var6 != null) {
                           InventoryComponent.Armor var8 = var4.getComponent(var3, InventoryComponent.Armor.getComponentType());
                           if (var8 != null) {
                              var8.getInventory().setItemStackForSlot((short)var6.getArmorSlot().ordinal(), new ItemStack(var4));
                           }
                        } else {
                           CombinedItemContainer var7 = InventoryComponent.getCombined(var4, var3, InventoryComponent.HOTBAR_FIRST);
                           var7.addItemStack(new ItemStack(var4));
                        }
                     }
                  }
               }
            );
         }
      }
   }

   class="kw">private class="kw">static void recomputeTextureColor(@Nonnull Path var0, @Nonnull EditorClient var1) {
      AssetPath var2 = AssetEditorPlugin.get().getOpenAssetPath(var1);
      String var3 = Item.getAssetStore().decodeFilePathKey(var0);
      Item var4 = Item.getAssetMap().getAsset(var3);
      if (var4 != null && var4.getBlockId() != null) {
         BlockTypeAssetMap var5 = BlockType.getAssetMap();
         BlockType var6 = var5.getAsset(var4.getBlockId());
         if (var6 == null) {
            var1.sendPopupNotification(
               AssetEditorPopupNotificationType.Error, Message.translation("server.assetEditor.messages.recomputeTextureColor.notBlockType")
            );
         } else {
            String var7 = extractTexturePath(var6);
            if (var7 != null) {
               AssetPack var8 = AssetModule.get().getAssetPacks().get(0);
               Path var9 = var8.getRoot().resolve("Common").resolve(var7);
               if (Files.isRegularFile(var9)) {
                  try {
                     String var10 = ColorParseUtil.computeDominantColor(var9);
                     if (var10 == null) {
                        class="kw">return;
                     }

                     JsonUpdateCommand var11 = new JsonUpdateCommand();
                     var11.type = JsonUpdateType.SetProperty;
                     var11.path = new String[]{"BlockType", "TextureComputedColor"};
                     var11.value = "{\"value\": \"" + var10 + "\"}";
                     JsonUpdateCommand[] var12 = new JsonUpdateCommand[]{var11};
                     AssetEditorPlugin.get().handleJsonAssetUpdate(var1, var2, "Item", -1, var12, 0);
                     var1.getPacketHandler().write(new AssetEditorJsonAssetUpdated(var2.toPacket(), var12));
                     var1.sendPopupNotification(
                        AssetEditorPopupNotificationType.Success,
                        Message.translation("server.assetEditor.messages.recomputeTextureColor.success").param("color", var10)
                     );
                  } catch (Exception var13) {
                     ((HytaleLogger.Api)HytaleLogger.getLogger().at(Level.WARNING).withCause(var13)).log("Failed to compute texture color");
                  }
               }
            }
         }
      } else {
         var1.sendPopupNotification(
            AssetEditorPopupNotificationType.Error, Message.translation("server.assetEditor.messages.recomputeTextureColor.notBlockType")
         );
      }
   }

   @Nullable
   class="kw">private class="kw">static String extractTexturePath(@Nonnull BlockType var0) {
      CustomModelTexture[] var1 = var0.getCustomModelTexture();
      if (var1 != null && var1.length > 0) {
         String var2 = var1[0].getTexture();
         if (var2 != null && !var2.isEmpty()) {
            class="kw">return var2;
         }
      }

      BlockTypeTextures[] var4 = var0.getTextures();
      if (var4 != null && var4.length > 0) {
         BlockTypeTextures var3 = var4[0];
         if (var3.getUp() != null) {
            class="kw">return var3.getUp();
         }

         if (var3.getNorth() != null) {
            class="kw">return var3.getNorth();
         }

         if (var3.getDown() != null) {
            class="kw">return var3.getDown();
         }
      }

      class="kw">return null;
   }

   class="kw">private class="kw">static void useModel(@Nonnull Path var0, @Nonnull EditorClient var1) {
      PlayerRef var2 = tryGetPlayer(var1);
      if (var2 != null) {
         Ref var3 = var2.getReference();
         if (var3 != null && var3.isValid()) {
            Store var4 = var3.getStore();
            World var5 = var4.getExternalData().getWorld();
            var5.execute(
               () -> {
                  String var4 = ModelAsset.getAssetStore().decodeFilePathKey(var0);
                  ModelAsset var5 = ModelAsset.getAssetMap().getAsset(var4);
                  if (var5 == null) {
                     Message var7 = Message.translation("server.assetEditor.messages.unknownModel").param("id", var4);
                     var1.sendPopupNotification(AssetEditorPopupNotificationType.Error, var7);
                  } else {
                     com.hypixel.hytale.server.core.asset.type.model.config.Model var6 = com.hypixel.hytale.server.core.asset.type.model.config.Model.createRandomScaleModel(
                        var5
                     );
                     var4.putComponent(var3, ModelComponent.getComponentType(), new ModelComponent(var6));
                  }
               }
            );
         }
      }
   }

   class="kw">private class="kw">static void onRequestLocalizationKeyDataSet(@Nonnull AssetEditorFetchAutoCompleteDataEvent var0) {
      ObjectArrayList var1 = new ObjectArrayList();
      String var2 = var0.getQuery().toLowerCase(Locale.ROOT);

      for (String var5 : I18nModule.get().getMessages("en-US").keySet()) {
         if (var5.toLowerCase(Locale.ROOT).startsWith(var2)) {
            var1.add(var5);
         }

         if (var1.size() >= 25) {
            break;
         }
      }

      var0.setResults((String[])var1.toArray(String[]::new));
   }

   class="kw">private class="kw">static void onRequestBlockGroupsDataSet(@Nonnull AssetEditorFetchAutoCompleteDataEvent var0) {
      ObjectArrayList var1 = new ObjectArrayList();
      String var2 = var0.getQuery().toLowerCase(Locale.ROOT);

      for (String var6 : BlockType.getAssetMap().getGroups()) {
         if (var6 != null && !var6.trim().isEmpty() && (var2.isEmpty() || var6.toLowerCase(Locale.ROOT).contains(var2))) {
            var1.add(var6);
         }
      }

      var0.setResults((String[])var1.toArray(String[]::new));
   }

   class="kw">private class="kw">static void onRequestItemCategoriesDataSet(@Nonnull AssetEditorRequestDataSetEvent var0) {
      ItemModule var1 = ItemModule.get();
      if (var1.isDisabled()) {
         HytaleLogger.getLogger().at(Level.WARNING).log("Received ItemCategories dataset request but ItemModule is disabled!");
      } else {
         var0.setResults(var1.getFlatItemCategoryList().toArray(String[]::new));
      }
   }

   class="kw">private class="kw">static void onClientDisconnected(@Nonnull AssetEditorClientDisconnectEvent var0) {
      AssetEditorPlugin var1 = AssetEditorPlugin.get();
      EditorClient var2 = var0.getEditorClient();
      PlayerRef var3 = var2.tryGetPlayer();
      UUID var4 = var2.getUuid();
      Set var5 = var1.getEditorClients(var4);
      if (var5 != null && var5.size() != 1) {
         AssetPath var6 = var1.getOpenAssetPath(var2);
         if (var6 != null && !var6.equals(AssetPath.EMPTY_PATH)) {
            AssetTypeHandler var7 = var1.getAssetTypeRegistry().getAssetTypeHandlerForPath(var6.path());
            if (var7 != null && Weather.class.getSimpleName().equals(var7.getConfig().id)) {
               activeWeatherPreviewMapping.remove(var4);
               if (var3 != null) {
                  var3.getPacketHandler().write(new UpdateEditorWeatherOverride(0));
               }
            }
         }
      } else {
         if (var3 != null) {
            var3.getPacketHandler().write(CLEAR_EDITOR_TIME_OVERRIDE_PACKET);
            var3.getPacketHandler().write(CLEAR_WEATHER_OVERRIDE_PACKET);
         }

         activeWeatherPreviewMapping.remove(var4);
      }
   }

   class="kw">static void resetTimeSettings(@Nonnull EditorClient var0, @Nonnull PlayerRef var1) {
      Ref var2 = var1.getReference();
      if (var2 != null && var2.isValid()) {
         Store var3 = var2.getStore();
         World var4 = var3.getExternalData().getWorld();
         Player var5 = var1.getComponent(Player.getComponentType());
         assert var5 != null;
         WorldTimeResource var6 = var3.getResource(WorldTimeResource.getResourceType());
         PacketHandler var7 = var0.getPacketHandler();
         AssetEditorUpdateSecondsPerGameDay var8 = new AssetEditorUpdateSecondsPerGameDay(var4.getDaytimeDurationSeconds(), var4.getNighttimeDurationSeconds());
         var7.write(var8);
         Instant var9 = var6.getGameTime();
         UpdateEditorTimeOverride var10 = new UpdateEditorTimeOverride(
            new InstantData(var9.getEpochSecond(), var9.getNano()), var4.getWorldConfig().isGameTimePaused()
         );
         var7.write(var10);
         var1.getPacketHandler().write(CLEAR_EDITOR_TIME_OVERRIDE_PACKET);
      }
   }

   class="kw">static void handleWeatherOrEnvironmentUnselected(@Nonnull EditorClient var0, @Nonnull Path var1, boolean var2) {
      PlayerRef var3 = var0.tryGetPlayer();
      if (var3 != null) {
         AssetSpecificFunctionality.PlayerPreviewData var4 = activeWeatherPreviewMapping.computeIfAbsent(
            var0.getUuid(), var0x -> new AssetSpecificFunctionality.PlayerPreviewData()
         );
         if (!var4.keepPreview) {
            resetTimeSettings(var0, var3);
            if (var2) {
               if (!var1.equals(var4.weatherAssetPath)) {
                  class="kw">return;
               }

               var4.weatherAssetPath = null;
               var3.getPacketHandler().write(CLEAR_WEATHER_OVERRIDE_PACKET);
            }
         }
      }
   }

   class="kw">static void handleWeatherOrEnvironmentSelected(@Nonnull EditorClient var0, @Nonnull Path var1, boolean var2) {
      PlayerRef var3 = var0.tryGetPlayer();
      if (var3 != null) {
         AssetSpecificFunctionality.PlayerPreviewData var4 = activeWeatherPreviewMapping.computeIfAbsent(
            var0.getUuid(), var0x -> new AssetSpecificFunctionality.PlayerPreviewData()
         );
         if (!var4.keepPreview) {
            resetTimeSettings(var0, var3);
         }

         if (var2) {
            AssetStore var5 = Weather.getAssetStore();
            String var6 = var5.decodeFilePathKey(var1);
            int var7 = ((IndexedLookupTableAssetMap)var5.getAssetMap()).getIndex(var6);
            var4.weatherAssetPath = var1;
            var3.getPacketHandler().write(new UpdateEditorWeatherOverride(var7));
         }
      }
   }

   class="kw">private class="kw">static void onSelectAsset(@Nonnull AssetEditorSelectAssetEvent var0) {
      String var1 = var0.getAssetType();
      if (MODEL_ASSET_ID.equals(var1)) {
         String var2 = ModelAsset.getAssetStore().decodeFilePathKey(var0.getAssetFilePath().path());
         ModelAsset var3 = ModelAsset.getAssetMap().getAsset(var2);
         if (var3 != null) {
            Model var4 = com.hypixel.hytale.server.core.asset.type.model.config.Model.createUnitScaleModel(var3).toPacket();
            var0.getEditorClient()
               .getPacketHandler()
               .write(new AssetEditorUpdateModelPreview(var0.getAssetFilePath().toPacket(), var4, null, DEFAULT_PREVIEW_CAMERA_SETTINGS));
         }
      }

      if (ITEM_ASSET_ID.equals(var1)) {
         AssetPath var6 = var0.getAssetFilePath();
         String var8 = Item.getAssetStore().decodeFilePathKey(var6.path());
         Item var10 = Item.getAssetMap().getAsset(var8);
         if (var10 != null) {
            AssetEditorUpdateModelPreview var5 = getModelPreviewPacketForItem(var6, var10);
            if (var5 != null) {
               var0.getEditorClient().getPacketHandler().write(var5);
            }
         }
      }

      String var7 = var0.getPreviousAssetType();
      boolean var9 = WEATHER_ASSET_ID.equals(var7);
      if (var9 || ENVIRONMENT_ASSET_ID.equals(var7)) {
         handleWeatherOrEnvironmentUnselected(var0.getEditorClient(), var0.getPreviousAssetFilePath().path(), var9);
      }

      boolean var11 = WEATHER_ASSET_ID.equals(var1);
      if (var11 || ENVIRONMENT_ASSET_ID.equals(var1)) {
         handleWeatherOrEnvironmentSelected(var0.getEditorClient(), var0.getAssetFilePath().path(), var11);
      }
   }

   class="kw">public class="kw">static AssetEditorUpdateModelPreview getModelPreviewPacketForItem(@Nonnull AssetPath var0, @Nullable Item var1) {
      if (var1 == null) {
         class="kw">return null;
      }

      AssetIconProperties var2 = var1.getIconProperties();
      AssetIconProperties var3 = getDefaultItemIconProperties(var1);
      if (var2 == null) {
         var2 = var3;
      }

      AssetEditorPreviewCameraSettings var4 = new AssetEditorPreviewCameraSettings();
      var4.modelScale = var2.getScale() * var1.getScale();
      Vector2f var5 = var2.getTranslation() != null ? var2.getTranslation() : var3.getTranslation();
      var4.cameraPosition = new Vector3f(-var5.x, -var5.y, 0.0F);
      Vector3f var6 = var2.getRotation() != null ? var2.getRotation() : var3.getRotation();
      var4.cameraOrientation = new Vector3f((float)(-Math.toRadians(var6.x)), (float)(-Math.toRadians(var6.y)), (float)(-Math.toRadians(var6.z)));
      if (var1.getModel() == null && var1.getBlockId() != null) {
         BlockType var7 = (BlockType)((BlockTypeAssetMap)BlockType.getAssetStore().getAssetMap()).getAsset(var1.getBlockId());
         if (var7 != null) {
            var4.modelScale = var4.modelScale * var7.getCustomModelScale();
            class="kw">return new AssetEditorUpdateModelPreview(var0.toPacket(), null, var7.toPacket(), var4);
         }
      }

      Model var8 = convertToModelPacket(var1);
      class="kw">return new AssetEditorUpdateModelPreview(var0.toPacket(), var8, null, var4);
   }

   @Nonnull
   class="kw">public class="kw">static AssetIconProperties getDefaultItemIconProperties(@Nonnull Item var0) {
      if (var0.getWeapon() != null) {
         class="kw">return new AssetIconProperties(0.37F, new Vector2f(-24.6F, -24.6F), new Vector3f(45.0F, 90.0F, 0.0F));
      }

      if (var0.getTool() != null) {
         class="kw">return new AssetIconProperties(0.5F, new Vector2f(-17.4F, -12.0F), new Vector3f(45.0F, 270.0F, 0.0F));
      }

      if (var0.getArmor() != null) {
         class="kw">return class="kw">switch (var0.getArmor().getArmorSlot()) {
            case Chest -> new AssetIconProperties(0.5F, new Vector2f(0.0F, -5.0F), new Vector3f(22.5F, 45.0F, 22.5F));
            case Head -> new AssetIconProperties(0.5F, new Vector2f(0.0F, -3.0F), new Vector3f(22.5F, 45.0F, 22.5F));
            case Legs -> new AssetIconProperties(0.5F, new Vector2f(0.0F, -25.8F), new Vector3f(22.5F, 45.0F, 22.5F));
            case Hands -> new AssetIconProperties(0.92F, new Vector2f(0.0F, -10.8F), new Vector3f(22.5F, 45.0F, 22.5F));
         };
      } else {
         class="kw">return new AssetIconProperties(0.58823F, new Vector2f(0.0F, -13.5F), new Vector3f(22.5F, 45.0F, 22.5F));
      }
   }

   @Nonnull
   class="kw">public class="kw">static Model convertToModelPacket(@Nonnull Item var0) {
      Model var1 = new Model();
      var1.path = var0.getModel();
      var1.texture = var0.getTexture();
      class="kw">return var1;
   }

   @Nonnull
   class="kw">private class="kw">static EventRegistry getEventRegistry() {
      class="kw">return AssetEditorPlugin.get().getEventRegistry();
   }

   class="kw">public class="kw">static class PlayerPreviewData {
      @Nullable
      class="kw">private Path weatherAssetPath;
      class="kw">private boolean keepPreview;

      class="kw">public PlayerPreviewData() {
      }
   }
}