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() {
}
}
}