LANDiscoveryPlugin.java
package com.hypixel.hytale.builtin.landiscovery;
import com.hypixel.hytale.protocol.packets.serveraccess.Access;
import com.hypixel.hytale.server.core.modules.singleplayer.SingleplayerRequestAccessEvent;
import com.hypixel.hytale.server.core.plugin.JavaPlugin;
import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class LANDiscoveryPlugin extends JavaPlugin {
@Nullable
private LANDiscoveryThread lanDiscoveryThread;
private static LANDiscoveryPlugin instance;
public static LANDiscoveryPlugin get() {
return instance;
}
public LANDiscoveryPlugin(@Nonnull JavaPluginInit init) {
super(init);
}
protected void setup() {
instance = this;
this.getCommandRegistry().registerCommand(new LANDiscoveryCommand());
this.getEventRegistry().registerGlobal(SingleplayerRequestAccessEvent.class, (event) -> this.setLANDiscoveryEnabled(event.getAccess() != Access.Private));
}
protected void start() {
if (this.lanDiscoveryThread != null) {
throw new IllegalArgumentException("Listener thread already exists!");
}
}
protected void shutdown() {
if (this.lanDiscoveryThread != null) {
this.setLANDiscoveryEnabled(false);
}
}
public void setLANDiscoveryEnabled(boolean enabled) {
if (!enabled && this.lanDiscoveryThread != null) {
this.lanDiscoveryThread.interrupt();
this.lanDiscoveryThread.getSocket().close();
this.lanDiscoveryThread = null;
} else if (enabled && this.lanDiscoveryThread == null) {
this.lanDiscoveryThread = new LANDiscoveryThread();
this.lanDiscoveryThread.start();
}
}
public boolean isLANDiscoveryEnabled() {
return this.lanDiscoveryThread != null;
}
@Nullable
public LANDiscoveryThread getLanDiscoveryThread() {
return this.lanDiscoveryThread;
}
}