LibJF/libjf-web-v1/src/main/java/io/gitlab/jfronny/libjf/web/impl/mixin/ServerNetworkIoMixin.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();
}
}