PluginListPageEventData class

Пакет: com.hypixel.hytale.server.core.plugin.pages

Файл: com/hypixel/hytale/server/core/plugin/pages/PluginListPage.java

Поля (9)

МодификаторыТипИмя
public static final BuilderCodec<PluginListPage.PluginListPageEventData> CODEC
static final String KEY_OPTION
static final String KEY_PLUGIN
static final String KEY_SEARCH_QUERY
static final String TYPE_KEY
private String option
private String plugin
private String searchQuery
private String type

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.plugin.pages;

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.common.plugin.PluginIdentifier;
class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.common.util.StringUtil;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandManager;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage;
class="kw">import com.hypixel.hytale.server.core.plugin.PluginBase;
class="kw">import com.hypixel.hytale.server.core.plugin.PluginListPageManager;
class="kw">import com.hypixel.hytale.server.core.plugin.PluginManager;
class="kw">import com.hypixel.hytale.server.core.ui.Value;
class="kw">import com.hypixel.hytale.server.core.ui.builder.EventData;
class="kw">import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder;
class="kw">import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectListIterator;
class="kw">import java.util.Map;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class PluginListPage class="kw">extends InteractiveCustomUIPage<PluginListPage.PluginListPageEventData> {
   class="kw">private class="kw">static class="kw">final Value<String> BUTTON_LABEL_STYLE = Value.ref("Pages/PluginListButton.ui", "LabelStyle");
   class="kw">private class="kw">static class="kw">final Value<String> BUTTON_LABEL_STYLE_SELECTED = Value.ref("Pages/PluginListButton.ui", "SelectedLabelStyle");
   @Nullable
   class="kw">private PluginListPage.PluginDetails selectedPlugin;
   @Nonnull
   class="kw">private class="kw">final ObjectList<PluginListPage.PluginDetails> availablePlugins = new ObjectArrayList();
   @Nonnull
   class="kw">private class="kw">final ObjectList<PluginListPage.PluginDetails> visiblePlugins = new ObjectArrayList();
   @Nullable
   class="kw">private PluginListPageManager.SessionSettings playerSessionSettings;

   class="kw">public PluginListPage(@Nonnull PlayerRef var1) {
      super(var1, CustomPageLifetime.CanDismiss, PluginListPage.PluginListPageEventData.CODEC);
   }

   @Override
   class="kw">public void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
      PluginListPageManager var5 = PluginListPageManager.get();
      var5.registerPluginListPage(this);
      this.playerSessionSettings = var4.ensureAndGetComponent(var1, PluginListPageManager.SessionSettings.getComponentType());
      var2.append("Pages/PluginListPage.ui");
      this.buildPluginList(var2, var3);
      var3.addEventBinding(CustomUIEventBindingType.ValueChanged, "#DescriptiveOnlyOption #CheckBox", EventData.of("Option", "DescriptiveOnly"));
      var3.addEventBinding(CustomUIEventBindingType.ValueChanged, "#SearchInput", EventData.of("@SearchQuery", "#SearchInput.Value"));
      if (!this.visiblePlugins.isEmpty()) {
         this.selectPlugin(((PluginListPage.PluginDetails)this.visiblePlugins.getFirst()).identifier.toString(), var2);
      }

      var2.set("#DescriptiveOnlyOption #CheckBox.Value", this.playerSessionSettings.descriptiveOnly);
      var2.set("#SearchInput.Value", this.playerSessionSettings.searchQuery);
   }

   class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull PluginListPage.PluginListPageEventData var3) {
      assert this.playerSessionSettings != null;
      UICommandBuilder var4 = new UICommandBuilder();
      UIEventBuilder var5 = new UIEventBuilder();
      if (var3.plugin != null) {
         class="kw">switch (var3.type) {
            case "Select":
               this.selectPlugin(var3.plugin, var4);
               break;
            case "Toggle":
               this.checkBoxChanged(var3.plugin, var4);
         }

         this.sendUpdate(var4, null, false);
      } else if (var3.option != null) {
         class="kw">switch (var3.option) {
            case "DescriptiveOnly":
               this.playerSessionSettings.descriptiveOnly = !this.playerSessionSettings.descriptiveOnly;
               this.buildPluginList(var4, var5);
               if (!this.visiblePlugins.isEmpty()) {
                  this.selectPlugin(((PluginListPage.PluginDetails)this.visiblePlugins.getFirst()).identifier.toString(), var4);
               }
            class="kw">default:
               this.sendUpdate(var4, var5, false);
         }
      } else if (var3.searchQuery != null) {
         this.playerSessionSettings.searchQuery = var3.searchQuery.trim();
         this.buildPluginList(var4, var5);
         this.sendUpdate(var4, var5, false);
      }
   }

   @Override
   class="kw">public void onDismiss(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
      PluginListPageManager.get().deregisterPluginListPage(this);
   }

   class="kw">private void buildPluginList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      assert this.playerSessionSettings != null;
      var1.clear("#PluginList");
      this.visiblePlugins.clear();
      this.availablePlugins.clear();
      PluginManager var3 = PluginManager.get();
      Map var4 = var3.getAvailablePlugins();
      var4.forEach((var1x, var2x) -> this.availablePlugins.add(new PluginListPage.PluginDetails(var2x, var1x)));
      ObjectListIterator var5 = this.availablePlugins.iterator();

      while (var5.hasNext()) {
         PluginListPage.PluginDetails var6 = (PluginListPage.PluginDetails)var5.next();
         String var7 = var6.manifest.getDescription();
         if (!this.playerSessionSettings.descriptiveOnly || var7 != null && !var7.isEmpty()) {
            this.visiblePlugins.add(var6);
         }
      }

      String var13 = this.playerSessionSettings.searchQuery;
      if (!var13.isEmpty()) {
         StringUtil.sortByFuzzyDistance(var13, this.visiblePlugins, var0 -> var0.identifier.toString());
      } else {
         this.visiblePlugins.sort((var0, var1x) -> {
            boolean var2 = "Hytale".equals(var0.identifier.getGroup());
            boolean var3 = "Hytale".equals(var1x.identifier.getGroup());
            if (var2 != var3) {
               class="kw">return var2 ? 1 : -1;
            } else {
               class="kw">return var0.identifier.toString().compareTo(var1x.identifier.toString());
            }
         });
      }

      int var14 = 0;

      for (int var15 = this.visiblePlugins.size(); var14 < var15; var14++) {
         PluginIdentifier var8 = ((PluginListPage.PluginDetails)this.visiblePlugins.get(var14)).identifier;
         String var9 = var8.toString();
         boolean var10 = false;
         PluginBase var11 = var3.getPlugin(var8);
         if (var11 != null) {
            var10 = var11.isEnabled();
         }

         String var12 = "#PluginList[" + var14 + "]";
         var1.append("#PluginList", "Pages/PluginListButton.ui");
         var1.set(var12 + " #Button.Text", var9);
         var1.set(var12 + " #CheckBox.Value", var10);
         var2.addEventBinding(CustomUIEventBindingType.Activating, var12 + " #Button", new EventData().append("Plugin", var9).append("Type", "Select"), false);
         var2.addEventBinding(
            CustomUIEventBindingType.ValueChanged, var12 + " #CheckBox", new EventData().append("Plugin", var9).append("Type", "Toggle"), false
         );
      }
   }

   class="kw">private void selectPlugin(@Nonnull String var1, @Nonnull UICommandBuilder var2) {
      PluginListPage.PluginDetails var3 = null;
      ObjectListIterator var4 = this.visiblePlugins.iterator();

      while (var4.hasNext()) {
         PluginListPage.PluginDetails var5 = (PluginListPage.PluginDetails)var4.next();
         if (var1.equals(var5.identifier.toString())) {
            var3 = var5;
            break;
         }
      }

      if (var3 != null) {
         if (this.selectedPlugin != null && this.visiblePlugins.contains(this.selectedPlugin)) {
            var2.set("#PluginList[" + this.visiblePlugins.indexOf(this.selectedPlugin) + "] #Button.Style", BUTTON_LABEL_STYLE);
         }

         var2.set("#PluginList[" + this.visiblePlugins.indexOf(var3) + "] #Button.Style", BUTTON_LABEL_STYLE_SELECTED);
         var2.set("#PluginName.Text", var3.manifest.getName());
         var2.set("#PluginIdentifier.Text", var3.identifier.toString());
         if (var3.manifest.getVersion() != null) {
            var2.set("#PluginVersion.Text", var3.manifest.getVersion().toString());
         } else {
            var2.set("#PluginVersion.Text", "");
         }

         if (var3.manifest.getDescription() != null) {
            var2.set("#PluginDescription.Text", var3.manifest.getDescription());
         } else {
            var2.set("#PluginDescription.Text", "");
         }

         this.selectedPlugin = var3;
      }
   }

   class="kw">private void checkBoxChanged(@Nonnull String var1, @Nonnull UICommandBuilder var2) {
      PluginListPage.PluginDetails var3 = null;
      ObjectListIterator var4 = this.visiblePlugins.iterator();

      while (var4.hasNext()) {
         PluginListPage.PluginDetails var5 = (PluginListPage.PluginDetails)var4.next();
         if (var1.equals(var5.identifier.toString())) {
            var3 = var5;
            break;
         }
      }

      if (var3 != null) {
         PluginManager var7 = PluginManager.get();
         PluginBase var8 = var7.getPlugin(var3.identifier);
         CommandManager var6 = CommandManager.get();
         if (var8 != null && var8.isEnabled()) {
            var6.handleCommand(this.playerRef, "plugin unload " + var3.identifier);
         } else {
            var6.handleCommand(this.playerRef, "plugin load " + var3.identifier);
         }
      }
   }

   class="kw">public void handlePluginChangeEvent(@Nonnull PluginIdentifier var1, boolean var2) {
      UICommandBuilder var3 = new UICommandBuilder();
      UIEventBuilder var4 = new UIEventBuilder();
      PluginListPage.PluginDetails var5 = null;
      int var6 = 0;

      for (int var7 = this.visiblePlugins.size(); var6 < var7; var6++) {
         PluginListPage.PluginDetails var8 = (PluginListPage.PluginDetails)this.visiblePlugins.get(var6);
         if (var8.identifier.equals(var1)) {
            var5 = var8;
            break;
         }
      }

      if (var5 != null) {
         String var9 = "#PluginList[" + this.visiblePlugins.indexOf(var5) + "]";
         var3.set(var9 + " #CheckBox.Value", var2);
         this.sendUpdate(var3, var4, false);
      }
   }

   class="kw">private class="kw">static class PluginDetails {
      @Nonnull
      class="kw">private class="kw">final PluginManifest manifest;
      @Nonnull
      class="kw">private class="kw">final PluginIdentifier identifier;

      class="kw">public PluginDetails(@Nonnull PluginManifest var1, @Nonnull PluginIdentifier var2) {
         this.identifier = var2;
         this.manifest = var1;
      }
   }

   class="kw">public class="kw">static class PluginListPageEventData {
      class="kw">static class="kw">final String KEY_PLUGIN = "Plugin";
      class="kw">static class="kw">final String TYPE_KEY = "Type";
      class="kw">static class="kw">final String KEY_OPTION = "Option";
      class="kw">static class="kw">final String KEY_SEARCH_QUERY = "@SearchQuery";
      class="kw">public class="kw">static class="kw">final BuilderCodec<PluginListPage.PluginListPageEventData> CODEC = BuilderCodec.builder(
            PluginListPage.PluginListPageEventData.class, PluginListPage.PluginListPageEventData::new
         )
         .append(new KeyedCodec<>("Plugin", Codec.STRING), (var0, var1) -> var0.plugin = var1, var0 -> var0.plugin)
         .add()
         .append(new KeyedCodec<>("Option", Codec.STRING), (var0, var1) -> var0.option = var1, var0 -> var0.option)
         .add()
         .append(new KeyedCodec<>("Type", Codec.STRING), (var0, var1) -> var0.type = var1, var0 -> var0.type)
         .add()
         .append(new KeyedCodec<>("@SearchQuery", Codec.STRING), (var0, var1) -> var0.searchQuery = var1, var0 -> var0.searchQuery)
         .add()
         .build();
      class="kw">private String plugin;
      class="kw">private String option;
      class="kw">private String type;
      class="kw">private String searchQuery;

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