PlayerPreviewData class

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

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

Поля (2)

МодификаторыТипИмя
private boolean keepPreview
private Path weatherAssetPath

Исходный код

Показать/скрыть
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() {
      }
   }
}