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