PluginBase class
Пакет: com.hypixel.hytale.server.core.plugin
Файл: com/hypixel/hytale/server/core/plugin/PluginBase.java
implements: CommandOwner
Поля (10)
| Модификаторы | Тип | Имя |
|---|---|---|
|
CompletableFuture[] |
var1 |
|
PluginManifest |
var2 |
|
IRegistry |
var2 |
|
IRegistry |
var2 |
|
IRegistry |
var2 |
|
String |
var3 |
|
Config |
var3 |
|
boolean |
var4 |
|
PluginIdentifier |
var4 |
|
String |
var5 |
Методы (17)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Must be called before setup") |
|
void |
cleanupvoid cleanup(boolean var1) |
abstract |
|
for for(int var2 = 0; var2 < this.configs.size() |
|
Throwable |
getFailureCauseThrowable getFailureCause() |
|
|
if if(this.state != PluginState.NONE) |
|
|
if if(this.state != PluginState.NONE && this.state != PluginState.DISABLED) |
|
|
if if(this.state != PluginState.SETUP) |
|
|
if if(this.failureCause == null) |
public |
boolean |
isDisabledboolean isDisabled() |
public |
boolean |
isEnabledboolean isEnabled() |
|
void |
setFailureCausevoid setFailureCause(Throwable var1) |
protected |
void |
setupvoid setup() |
final |
void |
setup0void setup0() |
protected |
void |
shutdownvoid shutdown() |
final |
void |
shutdown0void shutdown0(boolean var1) |
protected |
void |
startvoid start() |
final |
void |
start0void start0() |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.plugin;
class="kw">import com.hypixel.hytale.assetstore.JsonAsset;
class="kw">import com.hypixel.hytale.assetstore.codec.AssetCodecMapCodec;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.codec.lookup.MapKeyMapCodec;
class="kw">import com.hypixel.hytale.codec.lookup.StringCodecMapCodec;
class="kw">import com.hypixel.hytale.common.plugin.PluginIdentifier;
class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.component.ComponentRegistryProxy;
class="kw">import com.hypixel.hytale.event.EventRegistry;
class="kw">import com.hypixel.hytale.function.consumer.BooleanConsumer;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.metrics.MetricProvider;
class="kw">import com.hypixel.hytale.metrics.MetricsRegistry;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandOwner;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandRegistry;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityRegistry;
class="kw">import com.hypixel.hytale.server.core.plugin.registry.AssetRegistry;
class="kw">import com.hypixel.hytale.server.core.plugin.registry.CodecMapRegistry;
class="kw">import com.hypixel.hytale.server.core.plugin.registry.IRegistry;
class="kw">import com.hypixel.hytale.server.core.plugin.registry.MapKeyMapRegistry;
class="kw">import com.hypixel.hytale.server.core.registry.ClientFeatureRegistry;
class="kw">import com.hypixel.hytale.server.core.schema.SchemaGenerator;
class="kw">import com.hypixel.hytale.server.core.task.TaskRegistry;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.Config;
class="kw">import java.nio.file.Path;
class="kw">import java.util.List;
class="kw">import java.util.Locale;
class="kw">import java.util.Map;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.concurrent.CopyOnWriteArrayList;
class="kw">import java.util.function.Function;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class="kw">abstract class PluginBase class="kw">implements CommandOwner {
@Nonnull
class="kw">public class="kw">static class="kw">final MetricsRegistry<PluginBase> METRICS_REGISTRY = new MetricsRegistry<>(MetricProvider.maybe(Function.identity()))
.register("Identifier", var0 -> var0.identifier.toString(), Codec.STRING)
.register("Type", PluginBase::getType, new EnumCodec<>(PluginType.class))
.register("Manifest", var0 -> var0.manifest, PluginManifest.CODEC)
.register("State", var0 -> var0.state, new EnumCodec<>(PluginState.class))
.register("Builtin", var0 -> var0 class="kw">instanceof JavaPlugin var1 && var1.getClassLoader().isInServerClassPath(), Codec.BOOLEAN);
@Nonnull
class="kw">private class="kw">final HytaleLogger logger;
@Nonnull
class="kw">private class="kw">final PluginIdentifier identifier;
@Nonnull
class="kw">private class="kw">final PluginManifest manifest;
@Nonnull
class="kw">private class="kw">final Path dataDirectory;
@Nonnull
class="kw">private class="kw">final List<Config<?>> configs = new CopyOnWriteArrayList<>();
@Nonnull
class="kw">private PluginState state = PluginState.NONE;
class="kw">private class="kw">final String notEnabledString = "The plugin " + this.getIdentifier() + " is not enabled!";
@Nonnull
class="kw">private class="kw">final CopyOnWriteArrayList<BooleanConsumer> shutdownTasks = new CopyOnWriteArrayList<>();
class="kw">private class="kw">final ClientFeatureRegistry clientFeatureRegistry = new ClientFeatureRegistry(
this.shutdownTasks, () -> this.state != PluginState.NONE && this.state != PluginState.DISABLED, this.notEnabledString, this
);
class="kw">private class="kw">final CommandRegistry commandRegistry = new CommandRegistry(
this.shutdownTasks, () -> this.state != PluginState.NONE && this.state != PluginState.DISABLED, this.notEnabledString, this
);
class="kw">private class="kw">final EventRegistry eventRegistry = new EventRegistry(
this.shutdownTasks, () -> this.state != PluginState.NONE && this.state != PluginState.DISABLED, this.notEnabledString, HytaleServer.get().getEventBus()
);
class="kw">private class="kw">final EntityRegistry entityRegistry = new EntityRegistry(
this.shutdownTasks, () -> this.state != PluginState.NONE && this.state != PluginState.DISABLED, this.notEnabledString
);
class="kw">private class="kw">final TaskRegistry taskRegistry = new TaskRegistry(
this.shutdownTasks, () -> this.state != PluginState.NONE && this.state != PluginState.DISABLED, this.notEnabledString
);
class="kw">private class="kw">final ComponentRegistryProxy<EntityStore> entityStoreRegistry = new ComponentRegistryProxy<>(this.shutdownTasks, EntityStore.REGISTRY);
class="kw">private class="kw">final ComponentRegistryProxy<ChunkStore> chunkStoreRegistry = new ComponentRegistryProxy<>(this.shutdownTasks, ChunkStore.REGISTRY);
class="kw">private class="kw">final AssetRegistry assetRegistry = new AssetRegistry(this.shutdownTasks);
class="kw">private class="kw">final Map<Codec<?>, IRegistry> codecMapRegistries = new ConcurrentHashMap<>();
@Nonnull
class="kw">private class="kw">final String basePermission;
class="kw">private Throwable failureCause;
class="kw">public PluginBase(@Nonnull PluginInit var1) {
PluginManifest var2 = var1.getPluginManifest();
String var3 = var2.getName();
boolean var4 = this.getType() == PluginType.PLUGIN;
this.logger = HytaleLogger.get(var3 + (var4 ? "|P" : "|A"));
this.dataDirectory = var1.getDataDirectory();
this.identifier = new PluginIdentifier(var2);
this.manifest = var2;
if (!var1.isInServerClassPath()) {
this.logger.setPropagatesSentryToParent(false);
}
this.basePermission = createBasePermission(var2);
}
@Nonnull
class="kw">static String createBasePermission(@Nonnull PluginManifest var0) {
class="kw">return (var0.getGroup() + "." + var0.getName()).toLowerCase(Locale.ROOT).replace(' ', '_');
}
@Nonnull
class="kw">protected class="kw">final <T> Config<T> withConfig(@Nonnull BuilderCodec<T> var1) {
class="kw">return this.withConfig("config", var1);
}
@Nonnull
class="kw">protected class="kw">final <T> Config<T> withConfig(@Nonnull String var1, @Nonnull BuilderCodec<T> var2) {
if (this.state != PluginState.NONE) {
throw new IllegalStateException("Must be called before setup");
}
Config var3 = new Config<>(this.dataDirectory, var1, var2);
this.configs.add(var3);
PluginIdentifier var4 = this.getIdentifier();
String var5 = "Plugin." + var4.getGroup() + "." + var4.getName() + "." + var1;
SchemaGenerator.registerConfig(var5, var2, "Config/Plugin/" + var4.getGroup() + "/" + var4.getName(), null);
class="kw">return var3;
}
@Nullable
class="kw">public CompletableFuture<Void> preLoad() {
if (this.configs.isEmpty()) {
class="kw">return null;
}
CompletableFuture[] var1 = new CompletableFuture[this.configs.size()];
for (int var2 = 0; var2 < this.configs.size(); var2++) {
var1[var2] = this.configs.get(var2).load();
}
class="kw">return CompletableFuture.allOf(var1);
}
@Nonnull
@Override
class="kw">public String getName() {
class="kw">return this.identifier.toString();
}
@Nonnull
class="kw">public HytaleLogger getLogger() {
class="kw">return this.logger;
}
@Nonnull
class="kw">public PluginIdentifier getIdentifier() {
class="kw">return this.identifier;
}
@Nonnull
class="kw">public PluginManifest getManifest() {
class="kw">return this.manifest;
}
@Nonnull
class="kw">public Path getDataDirectory() {
class="kw">return this.dataDirectory;
}
@Nonnull
class="kw">public PluginState getState() {
class="kw">return this.state;
}
@Nonnull
class="kw">public ClientFeatureRegistry getClientFeatureRegistry() {
class="kw">return this.clientFeatureRegistry;
}
@Nonnull
class="kw">public CommandRegistry getCommandRegistry() {
class="kw">return this.commandRegistry;
}
@Nonnull
class="kw">public EventRegistry getEventRegistry() {
class="kw">return this.eventRegistry;
}
@Nonnull
class="kw">public EntityRegistry getEntityRegistry() {
class="kw">return this.entityRegistry;
}
@Nonnull
class="kw">public TaskRegistry getTaskRegistry() {
class="kw">return this.taskRegistry;
}
@Nonnull
class="kw">public ComponentRegistryProxy<EntityStore> getEntityStoreRegistry() {
class="kw">return this.entityStoreRegistry;
}
@Nonnull
class="kw">public ComponentRegistryProxy<ChunkStore> getChunkStoreRegistry() {
class="kw">return this.chunkStoreRegistry;
}
@Nonnull
class="kw">public AssetRegistry getAssetRegistry() {
class="kw">return this.assetRegistry;
}
@Nonnull
class="kw">public <T, C class="kw">extends Codec<? class="kw">extends T>> CodecMapRegistry<T, C> getCodecRegistry(@Nonnull StringCodecMapCodec<T, C> var1) {
IRegistry var2 = this.codecMapRegistries.computeIfAbsent(var1, var2x -> new CodecMapRegistry<>(this.shutdownTasks, var1));
class="kw">return (CodecMapRegistry<T, C>)var2;
}
@Nonnull
class="kw">public <K, T class="kw">extends JsonAsset<K>> CodecMapRegistry.Assets<T, ?> getCodecRegistry(@Nonnull AssetCodecMapCodec<K, T> var1) {
IRegistry var2 = this.codecMapRegistries.computeIfAbsent(var1, var2x -> new CodecMapRegistry.Assets<>(this.shutdownTasks, var1));
class="kw">return (CodecMapRegistry.Assets<T, ?>)var2;
}
@Nonnull
class="kw">public <V> MapKeyMapRegistry<V> getCodecRegistry(@Nonnull MapKeyMapCodec<V> var1) {
IRegistry var2 = this.codecMapRegistries.computeIfAbsent(var1, var2x -> new MapKeyMapRegistry<>(this.shutdownTasks, var1));
class="kw">return (MapKeyMapRegistry<V>)var2;
}
@Nonnull
class="kw">public class="kw">final String getBasePermission() {
class="kw">return this.basePermission;
}
class="kw">public boolean isDisabled() {
class="kw">return this.state == PluginState.NONE || this.state == PluginState.DISABLED || this.state == PluginState.SHUTDOWN || this.state == PluginState.FAILED;
}
class="kw">public boolean isEnabled() {
class="kw">return !this.isDisabled();
}
class="kw">protected class="kw">final void setup0() {
if (this.state != PluginState.NONE && this.state != PluginState.DISABLED) {
throw new IllegalArgumentException(String.valueOf(this.state));
}
this.state = PluginState.SETUP;
try {
this.setup();
} catch (Throwable var2) {
((HytaleLogger.Api)this.logger.at(Level.SEVERE).withCause(var2)).log("Failed to setup plugin %s", this.identifier);
this.state = PluginState.FAILED;
this.failureCause = var2;
}
}
class="kw">protected void setup() {
}
class="kw">protected class="kw">final void start0() {
if (this.state != PluginState.SETUP) {
throw new IllegalArgumentException(String.valueOf(this.state));
}
this.state = PluginState.START;
try {
this.start();
this.state = PluginState.ENABLED;
} catch (Throwable var2) {
((HytaleLogger.Api)this.logger.at(Level.SEVERE).withCause(var2)).log("Failed to start %s", this.identifier);
this.state = PluginState.FAILED;
this.failureCause = var2;
}
}
class="kw">protected void start() {
}
class="kw">protected class="kw">final void shutdown0(boolean var1) {
this.state = PluginState.SHUTDOWN;
try {
this.shutdown();
this.state = this.failureCause == null ? PluginState.DISABLED : PluginState.FAILED;
} catch (Throwable var3) {
((HytaleLogger.Api)this.logger.at(Level.SEVERE).withCause(var3)).log("Failed to shutdown %s", this.identifier);
this.state = PluginState.FAILED;
if (this.failureCause == null) {
this.failureCause = var3;
}
}
this.cleanup(var1);
}
class="kw">protected void shutdown() {
}
void cleanup(boolean var1) {
this.commandRegistry.shutdown();
this.eventRegistry.shutdown();
this.clientFeatureRegistry.shutdown();
this.taskRegistry.shutdown();
this.entityStoreRegistry.shutdown();
this.chunkStoreRegistry.shutdown();
this.codecMapRegistries.forEach((var0, var1x) -> var1x.shutdown());
this.assetRegistry.shutdown();
for (int var2 = this.shutdownTasks.size() - 1; var2 >= 0; var2--) {
this.shutdownTasks.get(var2).accept(var1);
}
}
Throwable getFailureCause() {
class="kw">return this.failureCause;
}
void setFailureCause(Throwable var1) {
this.failureCause = var1;
}
@Nonnull
class="kw">public class="kw">abstract PluginType getType();
}