CoreBuilder class

Пакет: com.hypixel.hytale.common.plugin

Файл: com/hypixel/hytale/common/plugin/PluginManifest.java

Поля (8)

МодификаторыТипИмя
private final Map<PluginIdentifier, SemverRange> dependencies
private String description
private final String group
private final Map<PluginIdentifier, SemverRange> loadBefore
private final String main
private final String name
private final Map<PluginIdentifier, SemverRange> optionalDependencies
private final Semver version

Методы (9)

МодификаторыВозвратСигнатура
public PluginManifest buildpublic PluginManifest build()
public static PluginManifest.CoreBuilder corePluginpublic static PluginManifest.CoreBuilder corePlugin(@Nonnull Class<?> var0)
public final PluginManifest.CoreBuilder dependspublic final PluginManifest.CoreBuilder depends(@Nonnull Class<?>... var1)
public PluginManifest.CoreBuilder descriptionpublic PluginManifest.CoreBuilder description(@Nonnull String var1)
for for(Class var5 : var1)
for for(Class var5 : var1)
for for(Class var5 : var1)
public final PluginManifest.CoreBuilder loadsBeforepublic final PluginManifest.CoreBuilder loadsBefore(@Nonnull Class<?>... var1)
public final PluginManifest.CoreBuilder optDependspublic final PluginManifest.CoreBuilder optDepends(@Nonnull Class<?>... var1)

Исходный код

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

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.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.codecs.map.ObjectMapCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.common.semver.Semver;
class="kw">import com.hypixel.hytale.common.semver.SemverRange;
class="kw">import com.hypixel.hytale.common.semver.SemverRangeCodec;
class="kw">import com.hypixel.hytale.common.util.java.ManifestUtil;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Collections;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.logging.Level;
class="kw">import java.util.regex.Pattern;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class PluginManifest {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">private class="kw">static class="kw">final BuilderCodec.Builder<PluginManifest> BUILDER = BuilderCodec.builder(PluginManifest.class, PluginManifest::new);
   class="kw">private class="kw">static class="kw">final Pattern LEGACY_DATED_VERSION = Pattern.compile("^\\d{4}\\.\\d{2}\\.\\d{2}-.+");
   @Nonnull
   class="kw">private class="kw">static class="kw">final Codec<SemverRange> SERVER_VERSION_CODEC = new SemverRangeCodec() {
      @Override
      class="kw">protected SemverRange parse(String var1) {
         if (PluginManifest.LEGACY_DATED_VERSION.matcher(var1).matches()) {
            PluginManifest.LOGGER
               .at(Level.WARNING)
               .log(
                  "Manifest ServerVersion '%s' is in the pre-semver YYYY.MM.DD-<sha> format. Treated as wildcard for backward compatibility. Update to a SemverRange.",
                  var1
               );
            class="kw">return SemverRange.WILDCARD;
         } else {
            class="kw">return super.parse(var1);
         }
      }
   };
   @Nonnull
   class="kw">public class="kw">static class="kw">final Codec<PluginManifest> CODEC = BUILDER.append(
         new KeyedCodec<>("Group", Codec.STRING), (var0, var1) -> var0.group = var1, var0 -> var0.group
      )
      .add()
      .<String>append(new KeyedCodec<>("Name", Codec.STRING), (var0, var1) -> var0.name = var1, var0 -> var0.name)
      .addValidator(Validators.nonNull())
      .add()
      .append(new KeyedCodec<>("Version", Semver.CODEC), (var0, var1) -> var0.version = var1, var0 -> var0.version)
      .add()
      .append(new KeyedCodec<>("Description", Codec.STRING), (var0, var1) -> var0.description = var1, var0 -> var0.description)
      .add()
      .append(
         new KeyedCodec<>("Authors", new ArrayCodec<>(AuthorInfo.CODEC, AuthorInfo[]::new)),
         (var0, var1) -> var0.authors = List.of(var1),
         var0 -> var0.authors.toArray(AuthorInfo[]::new)
      )
      .add()
      .append(new KeyedCodec<>("Website", Codec.STRING), (var0, var1) -> var0.website = var1, var0 -> var0.website)
      .add()
      .append(new KeyedCodec<>("Main", Codec.STRING), (var0, var1) -> var0.main = var1, var0 -> var0.main)
      .add()
      .append(new KeyedCodec<>("ServerVersion", SERVER_VERSION_CODEC), (var0, var1) -> var0.serverVersion = var1, var0 -> var0.serverVersion)
      .add()
      .append(
         new KeyedCodec<>(
            "Dependencies",
            new ObjectMapCodec<>(SemverRange.CODEC, Object2ObjectLinkedOpenHashMap::new, PluginIdentifier::toString, PluginIdentifier::fromString)
         ),
         (var0, var1) -> var0.dependencies = var1,
         var0 -> var0.dependencies
      )
      .add()
      .append(
         new KeyedCodec<>(
            "OptionalDependencies",
            new ObjectMapCodec<>(SemverRange.CODEC, Object2ObjectLinkedOpenHashMap::new, PluginIdentifier::toString, PluginIdentifier::fromString)
         ),
         (var0, var1) -> var0.optionalDependencies = var1,
         var0 -> var0.optionalDependencies
      )
      .add()
      .append(
         new KeyedCodec<>(
            "LoadBefore",
            new ObjectMapCodec<>(SemverRange.CODEC, Object2ObjectLinkedOpenHashMap::new, PluginIdentifier::toString, PluginIdentifier::fromString)
         ),
         (var0, var1) -> var0.loadBefore = var1,
         var0 -> var0.loadBefore
      )
      .add()
      .append(new KeyedCodec<>("DisabledByDefault", Codec.BOOLEAN), (var0, var1) -> var0.disabledByDefault = var1, var0 -> var0.disabledByDefault)
      .add()
      .append(new KeyedCodec<>("IncludesAssetPack", Codec.BOOLEAN), (var0, var1) -> var0.includesAssetPack = var1, var0 -> var0.includesAssetPack)
      .add()
      .build();
   @Nonnull
   class="kw">public class="kw">static class="kw">final Codec<PluginManifest[]> ARRAY_CODEC = new ArrayCodec<>(CODEC, PluginManifest[]::new);
   class="kw">public class="kw">static class="kw">final String CORE_GROUP = "Hytale";
   class="kw">private class="kw">static class="kw">final Semver CORE_VERSION = Semver.fromString(ManifestUtil.getVersion() == null ? "0.0.0-dev" : ManifestUtil.getVersion());
   class="kw">private String group;
   class="kw">private String name;
   class="kw">private Semver version;
   @Nullable
   class="kw">private String description;
   @Nonnull
   class="kw">private List<AuthorInfo> authors = new ObjectArrayList();
   @Nullable
   class="kw">private String website;
   @Nullable
   class="kw">private String main;
   @Nullable
   class="kw">private SemverRange serverVersion;
   @Nonnull
   class="kw">private Map<PluginIdentifier, SemverRange> dependencies = new Object2ObjectLinkedOpenHashMap();
   @Nonnull
   class="kw">private Map<PluginIdentifier, SemverRange> optionalDependencies = new Object2ObjectLinkedOpenHashMap();
   @Nonnull
   class="kw">private Map<PluginIdentifier, SemverRange> loadBefore = new Object2ObjectLinkedOpenHashMap();
   @Nonnull
   class="kw">private List<PluginManifest> subPlugins = new ArrayList<>();
   class="kw">private boolean disabledByDefault = false;
   class="kw">private boolean includesAssetPack = false;

   @Nonnull
   class="kw">public class="kw">static PluginManifest.ServerVersionCheck checkServerVersionCompatibility(@Nullable SemverRange var0, @Nullable String var1) {
      if (var0 == null) {
         class="kw">return PluginManifest.ServerVersionCheck.MISSING;
      }

      if (var1 == null) {
         class="kw">return PluginManifest.ServerVersionCheck.PARSE_FAILED;
      }

      try {
         class="kw">return var0.satisfies(Semver.fromString(var1)) ? PluginManifest.ServerVersionCheck.COMPATIBLE : PluginManifest.ServerVersionCheck.INCOMPATIBLE;
      } catch (IllegalArgumentException var3) {
         class="kw">return PluginManifest.ServerVersionCheck.PARSE_FAILED;
      }
   }

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

   class="kw">public PluginManifest(
      @Nonnull String var1,
      @Nonnull String var2,
      @Nonnull Semver var3,
      @Nullable String var4,
      @Nonnull List<AuthorInfo> var5,
      @Nullable String var6,
      @Nullable String var7,
      @Nonnull SemverRange var8,
      @Nonnull Map<PluginIdentifier, SemverRange> var9,
      @Nonnull Map<PluginIdentifier, SemverRange> var10,
      @Nonnull Map<PluginIdentifier, SemverRange> var11,
      @Nonnull List<PluginManifest> var12,
      boolean var13
   ) {
      this.group = var1;
      this.name = var2;
      this.version = var3;
      this.description = var4;
      this.authors = var5;
      this.website = var6;
      this.main = var7;
      this.serverVersion = var8;
      this.dependencies = var9;
      this.optionalDependencies = var10;
      this.loadBefore = var11;
      this.subPlugins = var12;
      this.disabledByDefault = var13;
   }

   class="kw">public String getGroup() {
      class="kw">return this.group;
   }

   class="kw">public String getName() {
      class="kw">return this.name;
   }

   class="kw">public Semver getVersion() {
      class="kw">return this.version;
   }

   @Nullable
   class="kw">public String getDescription() {
      class="kw">return this.description;
   }

   @Nonnull
   class="kw">public List<AuthorInfo> getAuthors() {
      class="kw">return Collections.unmodifiableList(this.authors);
   }

   @Nullable
   class="kw">public String getWebsite() {
      class="kw">return this.website;
   }

   class="kw">public void setGroup(@Nonnull String var1) {
      this.group = var1;
   }

   class="kw">public void setName(@Nonnull String var1) {
      this.name = var1;
   }

   class="kw">public void setVersion(@Nullable Semver var1) {
      this.version = var1;
   }

   class="kw">public void setDescription(@Nullable String var1) {
      this.description = var1;
   }

   class="kw">public void setAuthors(@Nonnull List<AuthorInfo> var1) {
      this.authors = var1;
   }

   class="kw">public void setWebsite(@Nullable String var1) {
      this.website = var1;
   }

   @Nullable
   class="kw">public String getMain() {
      class="kw">return this.main;
   }

   class="kw">public SemverRange getServerVersion() {
      class="kw">return this.serverVersion;
   }

   class="kw">public void setServerVersion(@Nullable SemverRange var1) {
      this.serverVersion = var1;
   }

   @Nonnull
   class="kw">public Map<PluginIdentifier, SemverRange> getDependencies() {
      class="kw">return Collections.unmodifiableMap(this.dependencies);
   }

   class="kw">public void injectDependency(PluginIdentifier var1, SemverRange var2) {
      this.dependencies.put(var1, var2);
   }

   @Nonnull
   class="kw">public Map<PluginIdentifier, SemverRange> getOptionalDependencies() {
      class="kw">return Collections.unmodifiableMap(this.optionalDependencies);
   }

   @Nonnull
   class="kw">public Map<PluginIdentifier, SemverRange> getLoadBefore() {
      class="kw">return Collections.unmodifiableMap(this.loadBefore);
   }

   class="kw">public boolean isDisabledByDefault() {
      class="kw">return this.disabledByDefault;
   }

   class="kw">public boolean includesAssetPack() {
      class="kw">return this.includesAssetPack;
   }

   @Nonnull
   class="kw">public List<PluginManifest> getSubPlugins() {
      class="kw">return Collections.unmodifiableList(this.subPlugins);
   }

   class="kw">public void inherit(@Nonnull PluginManifest var1) {
      if (this.group == null) {
         this.group = var1.group;
      }

      if (this.version == null) {
         this.version = var1.version;
      }

      if (this.description == null) {
         this.description = var1.description;
      }

      if (this.authors.isEmpty()) {
         this.authors = var1.authors;
      }

      if (this.website == null) {
         this.website = var1.website;
      }

      if (!this.disabledByDefault) {
         this.disabledByDefault = var1.disabledByDefault;
      }

      this.dependencies.put(new PluginIdentifier(var1), SemverRange.exact(var1.version));
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "PluginManifest{group='"
         + this.group
         + "', name='"
         + this.name
         + "', version='"
         + this.version
         + "', description='"
         + this.description
         + "', authors="
         + this.authors
         + ", website='"
         + this.website
         + "', main='"
         + this.main
         + "', serverVersion="
         + this.serverVersion
         + ", dependencies="
         + this.dependencies
         + ", optionalDependencies="
         + this.optionalDependencies
         + ", disabledByDefault="
         + this.disabledByDefault
         + "}";
   }

   @Nonnull
   class="kw">public class="kw">static PluginManifest.CoreBuilder corePlugin(@Nonnull Class<?> var0) {
      class="kw">return new PluginManifest.CoreBuilder("Hytale", var0.getSimpleName(), CORE_VERSION, var0.getName());
   }

   class="kw">static {
      BUILDER.append(
            new KeyedCodec<>("SubPlugins", new ArrayCodec<>(CODEC, PluginManifest[]::new)),
            (var0, var1) -> var0.subPlugins = List.of(var1),
            var0 -> var0.subPlugins.toArray(PluginManifest[]::new)
         )
         .add();
   }

   class="kw">public class="kw">static class CoreBuilder {
      @Nonnull
      class="kw">private class="kw">final String group;
      @Nonnull
      class="kw">private class="kw">final String name;
      @Nonnull
      class="kw">private class="kw">final Semver version;
      @Nullable
      class="kw">private String description;
      @Nonnull
      class="kw">private class="kw">final String main;
      @Nonnull
      class="kw">private class="kw">final Map<PluginIdentifier, SemverRange> dependencies = new Object2ObjectLinkedOpenHashMap();
      @Nonnull
      class="kw">private class="kw">final Map<PluginIdentifier, SemverRange> optionalDependencies = new Object2ObjectLinkedOpenHashMap();
      @Nonnull
      class="kw">private class="kw">final Map<PluginIdentifier, SemverRange> loadBefore = new Object2ObjectLinkedOpenHashMap();

      @Nonnull
      class="kw">public class="kw">static PluginManifest.CoreBuilder corePlugin(@Nonnull Class<?> var0) {
         class="kw">return new PluginManifest.CoreBuilder("Hytale", var0.getSimpleName(), PluginManifest.CORE_VERSION, var0.getName());
      }

      class="kw">private CoreBuilder(@Nonnull String var1, @Nonnull String var2, @Nonnull Semver var3, @Nonnull String var4) {
         this.group = var1;
         this.name = var2;
         this.version = var3;
         this.main = var4;
      }

      @Nonnull
      class="kw">public PluginManifest.CoreBuilder description(@Nonnull String var1) {
         this.description = var1;
         class="kw">return this;
      }

      @Nonnull
      @SafeVarargs
      class="kw">public class="kw">final PluginManifest.CoreBuilder depends(@Nonnull Class<?>... var1) {
         for (Class var5 : var1) {
            this.dependencies.put(new PluginIdentifier("Hytale", var5.getSimpleName()), SemverRange.WILDCARD);
         }

         class="kw">return this;
      }

      @Nonnull
      @SafeVarargs
      class="kw">public class="kw">final PluginManifest.CoreBuilder optDepends(@Nonnull Class<?>... var1) {
         for (Class var5 : var1) {
            this.optionalDependencies.put(new PluginIdentifier("Hytale", var5.getSimpleName()), SemverRange.WILDCARD);
         }

         class="kw">return this;
      }

      @Nonnull
      @SafeVarargs
      class="kw">public class="kw">final PluginManifest.CoreBuilder loadsBefore(@Nonnull Class<?>... var1) {
         for (Class var5 : var1) {
            this.loadBefore.put(new PluginIdentifier("Hytale", var5.getSimpleName()), SemverRange.WILDCARD);
         }

         class="kw">return this;
      }

      @Nonnull
      class="kw">public PluginManifest build() {
         class="kw">return new PluginManifest(
            this.group,
            this.name,
            this.version,
            this.description,
            Collections.emptyList(),
            null,
            this.main,
            SemverRange.WILDCARD,
            this.dependencies,
            this.optionalDependencies,
            this.loadBefore,
            Collections.emptyList(),
            false
         );
      }
   }

   class="kw">public enum ServerVersionCheck {
      COMPATIBLE,
      MISSING,
      PARSE_FAILED,
      INCOMPATIBLE;

      ServerVersionCheck() {
      }
   }
}