31 lines
1.1 KiB
Java
31 lines
1.1 KiB
Java
package io.gitlab.jfronny.libjf.web.impl.mixin;
|
|
|
|
import io.gitlab.jfronny.libjf.web.impl.util.ClaimPool;
|
|
import io.gitlab.jfronny.libjf.web.impl.variant.shared.SharedWebServer;
|
|
import net.minecraft.server.ServerNetworkIo;
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
import org.spongepowered.asm.mixin.Unique;
|
|
import org.spongepowered.asm.mixin.injection.At;
|
|
import org.spongepowered.asm.mixin.injection.Inject;
|
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
|
|
import java.net.InetAddress;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
|
|
@Mixin(ServerNetworkIo.class)
|
|
public class ServerNetworkIoMixin {
|
|
@Unique private final Set<ClaimPool<Integer>.Claim> libjf$portClaim = new HashSet<>();
|
|
|
|
@Inject(method = "bind(Ljava/net/InetAddress;I)V", at = @At("HEAD"))
|
|
void onBind(InetAddress address, int port, CallbackInfo ci) {
|
|
libjf$portClaim.add(SharedWebServer.gamePort.claim(port));
|
|
SharedWebServer.emitActive();
|
|
}
|
|
|
|
@Inject(method = "stop()V", at = @At("HEAD"))
|
|
void onStop(CallbackInfo ci) {
|
|
for (ClaimPool<Integer>.Claim claim : libjf$portClaim) claim.release();
|
|
}
|
|
}
|