CreativeHubPlugin class

Пакет: com.hypixel.hytale.builtin.creativehub

Файл: com/hypixel/hytale/builtin/creativehub/CreativeHubPlugin.java

extends: JavaPlugin

Поля (42)

МодификаторыТипИмя
instance
return
World var1
World var1
var1
Holder var1
World var10
InstanceEntityConfig var11
CreativeHubEntityConfig var12
WorldConfig var14
CreativeHubWorldConfig var15
PlayerRef var16
ISpawnProvider var17
World var2
UUID var2
World var2
Holder var2
World var2
Path var3
CreativeHubEntityConfig var3
CreativeHubEntityConfig var3
UUID var4
Universe var4
Path var4
World var4
World var4
String var5
World var5
CreativeHubWorldConfig var5
World var5
String var6
String var6
Player var6
boolean var6
World var7
Path var7
PlayerConfigData var7
PlayerRef var7
Path var8
long var8
PlayerWorldData var8
Transform var9

Методы (16)

МодификаторыВозвратСигнатура
abstract throw new RuntimeExceptionthrow new RuntimeException("Failed to spawn hub instance", var8)
public void clearHubInstancevoid clearHubInstance(@Nonnull UUID var1)
for for(String var4 : InstanceTemplatePathPrefixes)
static CreativeHubPlugin getCreativeHubPlugin get()
if if(var5 != null)
if if(var3 != null)
if if(var4 != null)
if if(var1 != null)
if if(var6 != null)
if if(var4 != null)
if if(var7 != null)
if if(!var6)
static void onPlayerAddToWorldvoid onPlayerAddToWorld(@Nonnull AddPlayerToWorldEvent var0)
static void onPlayerConnectvoid onPlayerConnect(@Nonnull PlayerConnectEvent var0)
static void onWorldRemovevoid onWorldRemove(@Nonnull RemoveWorldEvent var0)
abstract super super(var1)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.creativehub.command.HubCommand;
class="kw">import com.hypixel.hytale.builtin.creativehub.config.CreativeHubEntityConfig;
class="kw">import com.hypixel.hytale.builtin.creativehub.config.CreativeHubWorldConfig;
class="kw">import com.hypixel.hytale.builtin.creativehub.interactions.HubPortalInteraction;
class="kw">import com.hypixel.hytale.builtin.creativehub.systems.ReturnToHubButtonSystem;
class="kw">import com.hypixel.hytale.builtin.creativehub.ui.ReturnToHubButtonUI;
class="kw">import com.hypixel.hytale.builtin.instances.InstancesPlugin;
class="kw">import com.hypixel.hytale.builtin.instances.config.InstanceEntityConfig;
class="kw">import com.hypixel.hytale.builtin.instances.config.InstanceWorldConfig;
class="kw">import com.hypixel.hytale.builtin.instances.config.WorldReturnPoint;
class="kw">import com.hypixel.hytale.common.util.FormatUtil;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.vector.Transform;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.data.PlayerConfigData;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.data.PlayerWorldData;
class="kw">import com.hypixel.hytale.server.core.event.events.player.AddPlayerToWorldEvent;
class="kw">import com.hypixel.hytale.server.core.event.events.player.PlayerConnectEvent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.WorldConfig;
class="kw">import com.hypixel.hytale.server.core.universe.world.events.RemoveWorldEvent;
class="kw">import com.hypixel.hytale.server.core.universe.world.spawn.ISpawnProvider;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.io.FileUtil;
class="kw">import com.hypixel.hytale.sneakythrow.SneakyThrow;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Map;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.function.Consumer;
class="kw">import java.util.logging.Level;
class="kw">import java.util.stream.Stream;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class CreativeHubPlugin class="kw">extends JavaPlugin {
   @Nonnull
   class="kw">private class="kw">static class="kw">final String[] InstanceTemplatePathPrefixes = new String[]{"Defaults/", "Regions/", "Dungeons/", "Portals/", "Gyms/"};
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_HUB_RETURN_HINT = Message.translation("server.creativehub.portal.returnHint");
   class="kw">private class="kw">static CreativeHubPlugin instance;
   @Nonnull
   class="kw">private class="kw">final Map<UUID, World> activeHubInstances = new ConcurrentHashMap<>();
   class="kw">private ComponentType<EntityStore, CreativeHubEntityConfig> creativeHubEntityConfigComponentType;

   class="kw">public class="kw">static CreativeHubPlugin get() {
      class="kw">return instance;
   }

   class="kw">public CreativeHubPlugin(@Nonnull JavaPluginInit var1) {
      super(var1);
      instance = this;
   }

   @Nonnull
   class="kw">public World getOrSpawnHubInstance(@Nonnull World var1, @Nonnull CreativeHubWorldConfig var2, @Nonnull Transform var3) {
      UUID var4 = var1.getWorldConfig().getUuid();
      class="kw">return this.activeHubInstances.compute(var4, (var4x, var5) -> {
         if (var5 != null && var5.isAlive()) {
            class="kw">return (World)var5;
         }

         try {
            String var6 = resolveHubStartupInstance(var2.getStartupInstance());
            World var7 = InstancesPlugin.get().spawnInstance(var6, var1, var3).join();
            var7.getWorldConfig().setDeleteOnRemove(true);
            class="kw">return var7;
         } catch (Exception var8) {
            ((HytaleLogger.Api)this.getLogger().at(Level.SEVERE).withCause(var8)).log("Failed to spawn hub instance");
            throw new RuntimeException("Failed to spawn hub instance", var8);
         }
      });
   }

   @Nonnull
   class="kw">private class="kw">static String resolveHubStartupInstance(@Nonnull String var0) {
      if (InstancesPlugin.doesInstanceAssetExist(var0)) {
         class="kw">return var0;
      } else {
         class="kw">return var0.indexOf(47) < 0 && InstancesPlugin.doesInstanceAssetExist("Defaults/" + var0) ? "Defaults/" + var0 : var0;
      }
   }

   @Nonnull
   class="kw">private class="kw">static String resolveInstanceTemplateAssetName(@Nonnull String var0) {
      if (InstancesPlugin.doesInstanceAssetExist(var0)) {
         class="kw">return var0;
      }

      if (var0.indexOf(47) >= 0) {
         class="kw">return var0;
      }

      for (String var4 : InstanceTemplatePathPrefixes) {
         String var5 = var4 + var0;
         if (InstancesPlugin.doesInstanceAssetExist(var5)) {
            class="kw">return var5;
         }
      }

      class="kw">return var0;
   }

   @Nullable
   class="kw">public World getActiveHubInstance(@Nonnull World var1) {
      World var2 = this.activeHubInstances.get(var1.getWorldConfig().getUuid());
      class="kw">return var2 != null && var2.isAlive() ? var2 : null;
   }

   class="kw">public void clearHubInstance(@Nonnull UUID var1) {
      this.activeHubInstances.remove(var1);
   }

   @Nonnull
   class="kw">public CompletableFuture<World> spawnPermanentWorldFromTemplate(@Nonnull String var1, @Nonnull String var2, @Nullable Consumer<WorldConfig> var3) {
      Universe var4 = Universe.get();
      World var5 = var4.getWorld(var2);
      if (var5 != null) {
         class="kw">return CompletableFuture.completedFuture(var5);
      }

      if (var4.isWorldLoadable(var2)) {
         class="kw">return var4.loadWorld(var2);
      }

      String var6 = resolveInstanceTemplateAssetName(var1);
      Path var7 = InstancesPlugin.getInstanceAssetPath(var6);
      Path var8 = var4.validateWorldPath(var2);
      class="kw">return WorldConfig.load(var7.resolve("instance.bson"))
         .thenApplyAsync(
            SneakyThrow.sneakyFunction(
               var7x -> {
                  var7x.setUuid(UUID.randomUUID());
                  var7x.setDeleteOnRemove(false);
                  if (var7x.getDisplayName() == null) {
                     var7x.setDisplayName(WorldConfig.formatDisplayName(var1));
                  }

                  var7x.getPluginConfig().remove(InstanceWorldConfig.class);
                  if (var3 != null) {
                     var3.accept(var7x);
                  }

                  var7x.markChanged();
                  long var8 = System.nanoTime();
                  this.getLogger().at(Level.INFO).log("Copying instance template %s to permanent world %s", var6, var2);

                  try (Stream var10 = Files.walk(var7, FileUtil.DEFAULT_WALK_TREE_OPTIONS_ARRAY)) {
                     var10.forEach(SneakyThrow.sneakyConsumer(var2x -> {
                        Path var3 = var7.relativize(var2x);
                        Path var4 = var8.resolve(var3.toString());
                        if (Files.isDirectory(var2x)) {
                           Files.createDirectories(var4);
                        } else {
                           if (Files.isRegularFile(var2x)) {
                              Files.copy(var2x, var4);
                           }
                        }
                     }));
                  }

                  this.getLogger()
                     .at(Level.INFO)
                     .log("Completed copying instance template %s to permanent world %s in %s", var6, var2, FormatUtil.nanosToString(System.nanoTime() - var8));
                  class="kw">return var7x;
               }
            )
         )
         .thenCompose(var3x -> var4.makeWorld(var2, var8, var3x));
   }

   @Nonnull
   class="kw">public ComponentType<EntityStore, CreativeHubEntityConfig> getCreativeHubEntityConfigComponentType() {
      class="kw">return this.creativeHubEntityConfigComponentType;
   }

   @Override
   class="kw">protected void setup() {
      this.getCommandRegistry().registerCommand(new HubCommand());
      this.getCodecRegistry(Interaction.CODEC).register("HubPortal", HubPortalInteraction.class, HubPortalInteraction.CODEC);
      this.getCodecRegistry(WorldConfig.PLUGIN_CODEC).register(CreativeHubWorldConfig.class, "CreativeHub", CreativeHubWorldConfig.CODEC);
      this.creativeHubEntityConfigComponentType = this.getEntityStoreRegistry()
         .registerComponent(CreativeHubEntityConfig.class, "CreativeHub", CreativeHubEntityConfig.CODEC);
      this.getEntityStoreRegistry().registerSystem(new ReturnToHubButtonSystem());
      this.getEventRegistry().registerGlobal(PlayerConnectEvent.class, CreativeHubPlugin::onPlayerConnect);
      this.getEventRegistry().registerGlobal(RemoveWorldEvent.class, CreativeHubPlugin::onWorldRemove);
      this.getEventRegistry().registerGlobal(AddPlayerToWorldEvent.class, CreativeHubPlugin::onPlayerAddToWorld);
      ReturnToHubButtonUI.register();
   }

   class="kw">private class="kw">static void onWorldRemove(@Nonnull RemoveWorldEvent var0) {
      World var1 = var0.getWorld();
      UUID var2 = var1.getWorldConfig().getUuid();
      get().activeHubInstances.entrySet().removeIf(var1x -> {
         World var2 = var1x.getValue();
         class="kw">return var2 != null && var2.getWorldConfig().getUuid().equals(var2);
      });
   }

   class="kw">private class="kw">static void onPlayerConnect(@Nonnull PlayerConnectEvent var0) {
      World var1 = var0.getWorld();
      Holder var2 = var0.getHolder();
      CreativeHubEntityConfig var3 = CreativeHubEntityConfig.get(var2);
      if (var3 != null && var3.getParentHubWorldUuid() != null) {
         World var4 = Universe.get().getWorld(var3.getParentHubWorldUuid());
         if (var4 != null) {
            CreativeHubWorldConfig var5 = CreativeHubWorldConfig.get(var4.getWorldConfig());
            if (var5 != null && var5.getStartupInstance() != null && var1 == null) {
               var0.setWorld(var4);
               var1 = var4;
               var2.tryRemoveComponent(TransformComponent.getComponentType());
            }
         }
      }

      if (var1 != null) {
         WorldConfig var14 = var1.getWorldConfig();
         CreativeHubWorldConfig var15 = CreativeHubWorldConfig.get(var14);
         if (var15 != null && var15.getStartupInstance() != null) {
            Player var6 = var2.getComponent(Player.getComponentType());
            if (var6 != null) {
               PlayerConfigData var7 = var6.getPlayerConfigData();
               if (var1.getName().equals(var7.getWorld())) {
                  PlayerWorldData var8 = var7.getPerWorldData().get(var1.getName());
                  if (var8 != null && var8.getLastPosition() != null) {
                     class="kw">return;
                  }
               }
            }

            PlayerRef var16 = var0.getPlayerRef();
            ISpawnProvider var17 = var14.getSpawnProvider();
            Transform var9 = var17 != null ? var17.getSpawnPoint(var1, var16.getUuid()) : new Transform();

            try {
               World var10 = get().getOrSpawnHubInstance(var1, var15, var9);
               InstanceEntityConfig var11 = InstanceEntityConfig.ensureAndGet(var2);
               var11.setReturnPoint(new WorldReturnPoint(var1.getWorldConfig().getUuid(), var9, false, null, null));
               CreativeHubEntityConfig var12 = CreativeHubEntityConfig.ensureAndGet(var2);
               var12.setParentHubWorldUuid(var1.getWorldConfig().getUuid());
               var0.setWorld(var10);
               var2.tryRemoveComponent(TransformComponent.getComponentType());
            } catch (Exception var13) {
               ((HytaleLogger.Api)get().getLogger().at(Level.SEVERE).withCause(var13))
                  .log("Failed to get/spawn hub instance for player %s, falling back to class="kw">default world", var16.getUuid());
            }
         }
      }
   }

   class="kw">private class="kw">static void onPlayerAddToWorld(@Nonnull AddPlayerToWorldEvent var0) {
      Holder var1 = var0.getHolder();
      World var2 = var0.getWorld();
      CreativeHubEntityConfig var3 = var1.getComponent(CreativeHubEntityConfig.getComponentType());
      if (var3 != null && var3.getParentHubWorldUuid() != null) {
         World var4 = Universe.get().getWorld(var3.getParentHubWorldUuid());
         if (var4 != null) {
            World var5 = get().getActiveHubInstance(var4);
            boolean var6 = var2.equals(var5);
            PlayerRef var7 = var1.getComponent(PlayerRef.getComponentType());
            if (var7 != null) {
               ReturnToHubButtonUI.send(var7, var6);
               if (!var6) {
                  var2.execute(() -> var7.sendMessage(MESSAGE_HUB_RETURN_HINT));
               }
            }
         }
      }
   }
}