SingleplayerModule class

Пакет: com.hypixel.hytale.server.core.modules.singleplayer

Файл: com/hypixel/hytale/server/core/modules/singleplayer/SingleplayerModule.java

extends: JavaPlugin

Поля (14)

МодификаторыТипИмя
final PluginManifest MANIFEST
instance
Integer var1
ServerManager var2
TelemetryModule var2
World var2
CompletableFuture var3
short var3
PlayerRef var3
IEventDispatcher var4
PermissionsModule var4
UUID var5
short var8
IEventDispatcher var9

Методы (24)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Server access can only be modified in singleplayer!")
static void checkClientPidvoid checkClientPid()
abstract checkClientPid checkClientPid()
static SingleplayerModule getSingleplayerModule get()
public Access getAccessAccess getAccess()
public Access getRequestedAccessAccess getRequestedAccess()
static String getUsernameString getUsername()
static UUID getUuidUUID getUuid()
if if(Constants.SINGLEPLAYER)
if if(Constants.SINGLEPLAYER)
if if(var1 != null)
if if(!Constants.SINGLEPLAYER)
if if(var1 != Access.Private)
if if(var2x == 0)
if if(this.requestedAccess != var1)
if if(var1 == Access.Private)
if if(var2 != null)
static boolean isOwnerboolean isOwner(@Nonnull PlayerRef var0)
static boolean isOwnerboolean isOwner(@Nonnull UUID var0)
private void onPlayerConnectvoid onPlayerConnect(@Nonnull PlayerConnectEvent var1)
public void requestServerAccessvoid requestServerAccess(Access var1)
public void setPublicAddressesvoid setPublicAddresses(List<InetSocketAddress> var1)
abstract super super(var1)
public void updateAccessvoid updateAccess(@Nonnull Access var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.singleplayer;

class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.common.util.CompletableFutureUtil;
class="kw">import com.hypixel.hytale.event.IEventDispatcher;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.GameMode;
class="kw">import com.hypixel.hytale.protocol.io.ServerListener;
class="kw">import com.hypixel.hytale.protocol.packets.serveraccess.Access;
class="kw">import com.hypixel.hytale.protocol.packets.serveraccess.RequestServerAccess;
class="kw">import com.hypixel.hytale.server.core.Constants;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.Options;
class="kw">import com.hypixel.hytale.server.core.ShutdownReason;
class="kw">import com.hypixel.hytale.server.core.event.events.player.PlayerConnectEvent;
class="kw">import com.hypixel.hytale.server.core.io.ServerManager;
class="kw">import com.hypixel.hytale.server.core.io.ice.IceModule;
class="kw">import com.hypixel.hytale.server.core.modules.accesscontrol.AccessControlModule;
class="kw">import com.hypixel.hytale.server.core.modules.accesscontrol.provider.ClientDelegatingProvider;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.InteractionModule;
class="kw">import com.hypixel.hytale.server.core.modules.singleplayer.commands.PlayCommand;
class="kw">import com.hypixel.hytale.server.core.permissions.PermissionsModule;
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.telemetry.TelemetryModule;
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.util.ProcessUtil;
class="kw">import java.net.InetSocketAddress;
class="kw">import java.util.List;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.CopyOnWriteArrayList;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

class="kw">public class SingleplayerModule class="kw">extends JavaPlugin {
   class="kw">public class="kw">static class="kw">final PluginManifest MANIFEST = PluginManifest.corePlugin(SingleplayerModule.class)
      .depends(AccessControlModule.class)
      .optDepends(InteractionModule.class)
      .build();
   class="kw">private class="kw">static SingleplayerModule instance;
   class="kw">private Access access;
   class="kw">private class="kw">volatile Access requestedAccess;
   class="kw">private List<InetSocketAddress> publicAddresses = new CopyOnWriteArrayList<>();

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

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

   @Override
   class="kw">protected void setup() {
      if (Constants.SINGLEPLAYER) {
         AccessControlModule.get().registerAccessProvider(new ClientDelegatingProvider());
      }

      this.getCommandRegistry().registerCommand(new PlayCommand(this));
   }

   @Override
   class="kw">protected void start() {
      if (Constants.SINGLEPLAYER) {
         this.getEventRegistry().register(PlayerConnectEvent.class, this::onPlayerConnect);
      }

      Integer var1 = (Integer)Options.getOptionSet().valueOf(Options.CLIENT_PID);
      if (var1 != null) {
         this.getLogger().at(Level.INFO).log("Client PID: %d", var1);
         HytaleServer.SCHEDULED_EXECUTOR.scheduleWithFixedDelay(() -> {
            try {
               checkClientPid();
            } catch (Exception var2) {
               ((HytaleLogger.Api)this.getLogger().at(Level.SEVERE).withCause(var2)).log("Failed to check client PID!");
            }
         }, 60L, 60L, TimeUnit.SECONDS);
      }
   }

   class="kw">public Access getAccess() {
      class="kw">return this.access;
   }

   class="kw">public Access getRequestedAccess() {
      class="kw">return this.requestedAccess;
   }

   class="kw">public void requestServerAccess(Access var1) {
      if (!Constants.SINGLEPLAYER) {
         throw new IllegalArgumentException("Server access can only be modified in singleplayer!");
      }

      ServerManager var2 = ServerManager.get();
      if (var1 != Access.Private) {
         CompletableFuture var3 = var2.bind(new InetSocketAddress(0));
         CompletableFutureUtil._catch(var3.thenAccept(var2x -> {
            if (var2x == 0) {
               this.getLogger().at(Level.WARNING).log("Could not bind a listener for %s access, so the world stays class="kw">private", var1);
               this.requestServerAccess(Access.Private);
            } else {
               short var3 = (short)var2x.intValue();
               IEventDispatcher var4 = HytaleServer.get().getEventBus().dispatchFor(SingleplayerRequestAccessEvent.class);
               if (var4.hasListener()) {
                  var4.dispatch(new SingleplayerRequestAccessEvent(var1));
               }

               Universe.get().getPlayer(getUuid()).getPacketHandler().writeNoCache(new RequestServerAccess(var1, var3));
               this.requestedAccess = var1;
            }
         }));
      } else {
         short var8 = 0;

         for (ServerListener var5 : var2.getListeners()) {
            if (var5.localAddress() class="kw">instanceof InetSocketAddress var6 && var6.getAddress().isAnyLocalAddress()) {
               var2.unbind(var5);
            }
         }

         IEventDispatcher var9 = HytaleServer.get().getEventBus().dispatchFor(SingleplayerRequestAccessEvent.class);
         if (var9.hasListener()) {
            var9.dispatch(new SingleplayerRequestAccessEvent(var1));
         }

         Universe.get().getPlayer(getUuid()).getPacketHandler().writeNoCache(new RequestServerAccess(var1, var8));
         this.requestedAccess = var1;
      }
   }

   class="kw">public void setPublicAddresses(List<InetSocketAddress> var1) {
      this.publicAddresses = var1;
   }

   class="kw">public void updateAccess(@Nonnull Access var1) {
      if (this.requestedAccess != var1) {
         Universe.get()
            .sendMessage(
               Message.translation("server.modules.sp.requestAccessDifferent")
                  .param("requestedAccess", this.requestedAccess.toString())
                  .param("access", var1.toString())
            );
      }

      Universe.get().sendMessage(Message.translation("server.modules.sp.serverAccessUpdated").param("access", var1.toString()));
      this.access = var1;
      if (var1 == Access.Private) {
         IceModule.shutdown();
      } else {
         TelemetryModule var2 = TelemetryModule.get();
         if (var2 != null) {
            var2.getService().recordP2PAccess(var1.toString());
         }
      }
   }

   class="kw">private void onPlayerConnect(@Nonnull PlayerConnectEvent var1) {
      World var2 = var1.getWorld();
      if (var2 != null && var2.getWorldConfig().getGameMode() == GameMode.Creative) {
         PlayerRef var3 = var1.getPlayerRef();
         PermissionsModule var4 = PermissionsModule.get();
         UUID var5 = var3.getUuid();
         if (isOwner(var3)) {
            var4.setUserGroup(var5, "hytale:Admin");
         } else {
            var4.setUserGroup(var5, "hytale:Builder");
         }
      }
   }

   class="kw">public class="kw">static void checkClientPid() {
      if (!ProcessUtil.isProcessRunning((Integer)Options.getOptionSet().valueOf(Options.CLIENT_PID))) {
         HytaleServer.get().shutdownServer(ShutdownReason.CLIENT_GONE);
      }
   }

   class="kw">public class="kw">static UUID getUuid() {
      class="kw">return (UUID)Options.getOptionSet().valueOf(Options.OWNER_UUID);
   }

   class="kw">public class="kw">static String getUsername() {
      class="kw">return (String)Options.getOptionSet().valueOf(Options.OWNER_NAME);
   }

   class="kw">public class="kw">static boolean isOwner(@Nonnull PlayerRef var0) {
      class="kw">return isOwner(var0.getUuid());
   }

   class="kw">public class="kw">static boolean isOwner(@Nonnull UUID var0) {
      class="kw">return var0.equals(getUuid());
   }
}