PluginListPage class

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

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

extends: InteractiveCustomUIPage<PluginListPage.PluginListPageEventData>

Поля (52)

МодификаторыТипИмя
final Value<String> BUTTON_LABEL_STYLE
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
break
break
break
break
private final PluginIdentifier identifier
private final PluginManifest manifest
private String option
private String plugin
private String searchQuery
private String type
boolean var10
var10
PluginBase var11
String var12
String var13
int var14
boolean var2
PluginManager var3
boolean var3
PluginListPage.PluginDetails var3
var3
PluginListPage.PluginDetails var3
var3
UICommandBuilder var3
UICommandBuilder var4
Map var4
ObjectListIterator var4
ObjectListIterator var4
UIEventBuilder var4
PluginListPageManager var5
UIEventBuilder var5
ObjectListIterator var5
PluginListPage.PluginDetails var5
PluginListPage.PluginDetails var5
PluginListPage.PluginDetails var5
var5
PluginListPage.PluginDetails var6
CommandManager var6
int var6
String var7
PluginManager var7
PluginIdentifier var8
PluginBase var8
PluginListPage.PluginDetails var8
String var9
String var9

Методы (18)

МодификаторыВозвратСигнатура
public PluginDetailspublic PluginDetails(@Nonnull PluginManifest var1, @Nonnull PluginIdentifier var2)
public PluginListPageEventDatapublic PluginListPageEventData()
private void buildPluginListvoid buildPluginList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2)
private void checkBoxChangedvoid checkBoxChanged(@Nonnull String var1, @Nonnull UICommandBuilder var2)
abstract for for(int var15 = this.visiblePlugins.size()
abstract for for(int var7 = this.visiblePlugins.size()
public void handleDataEventvoid handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull PluginListPage.PluginListPageEventData var3)
public void handlePluginChangeEventvoid handlePluginChangeEvent(@Nonnull PluginIdentifier var1, boolean var2)
if if(var3.plugin != null)
if if(var2 != var3)
if if(var11 != null)
if if(var3 != null)
if if(var3 != null)
if if(var5 != null)
private void selectPluginvoid selectPlugin(@Nonnull String var1, @Nonnull UICommandBuilder var2)
abstract super super(var1, CustomPageLifetime.CanDismiss, PluginListPage.PluginListPageEventData.CODEC)
switch switch(var3.type)
switch switch(var3.option)

Исходный код

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