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.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.Claim claim : libjf$portClaim) claim.release(); } }