Fixed server IO errors / Fixed kick IP tracing

This commit is contained in:
Anuken
2021-07-10 22:18:58 -04:00
parent 158d11d3ba
commit 8a84ebb58d
5 changed files with 51 additions and 24 deletions

View File

@@ -344,8 +344,7 @@ public class NetServer implements ApplicationListener{
boolean checkPass(){
if(votes >= votesRequired()){
Call.sendMessage(Strings.format("[orange]Vote passed.[scarlet] @[orange] will be banned from the server for @ minutes.", target.name, (kickDuration / 60)));
target.getInfo().lastKicked = Time.millis() + kickDuration * 1000;
Groups.player.each(p -> p.uuid().equals(target.uuid()), p -> p.kick(KickReason.vote));
Groups.player.each(p -> p.uuid().equals(target.uuid()), p -> p.kick(KickReason.vote, kickDuration * 1000));
map[0] = null;
task.cancel();
return true;

View File

@@ -238,6 +238,10 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
con.kick(reason);
}
void kick(KickReason reason, long duration){
con.kick(reason, duration);
}
void kick(String reason){
con.kick(reason);
}

View File

@@ -4,7 +4,6 @@ import arc.struct.*;
import arc.util.*;
import mindustry.entities.units.*;
import mindustry.gen.*;
import mindustry.net.Administration.*;
import mindustry.net.Packets.*;
import java.io.*;
@@ -37,38 +36,39 @@ public abstract class NetConnection{
/** Kick with a special, localized reason. Use this if possible. */
public void kick(KickReason reason){
if(kicked) return;
kick(reason, (reason == KickReason.kick || reason == KickReason.banned || reason == KickReason.vote) ? 30 * 1000 : 0);
}
Log.info("Kicking connection @ / @; Reason: @", address, uuid, reason.name());
if((reason == KickReason.kick || reason == KickReason.banned || reason == KickReason.vote)){
PlayerInfo info = netServer.admins.getInfo(uuid);
info.timesKicked++;
info.lastKicked = Math.max(Time.millis() + 30 * 1000, info.lastKicked);
}
Call.kick(this, reason);
close();
netServer.admins.save();
kicked = true;
/** Kick with a special, localized reason. Use this if possible. */
public void kick(KickReason reason, long kickDuration){
kick(null, reason, kickDuration);
}
/** Kick with an arbitrary reason. */
public void kick(String reason){
kick(reason, 30 * 1000);
kick(reason, null, 30 * 1000);
}
/** Kick with an arbitrary reason. */
public void kick(String reason, long duration){
kick(reason, null, duration);
}
/** Kick with an arbitrary reason, and a kick duration in milliseconds. */
public void kick(String reason, long kickDuration){
private void kick(String reason, KickReason kickType, long kickDuration){
if(kicked) return;
Log.info("Kicking connection @ / @; Reason: @", address, uuid, reason.replace("\n", " "));
Log.info("Kicking connection @ / @; Reason: @", address, uuid, reason == null ? kickType.name() : reason.replace("\n", " "));
netServer.admins.handleKicked(uuid, address, kickDuration);
if(kickDuration > 0){
netServer.admins.handleKicked(uuid, address, kickDuration);
}
Call.kick(this, reason);
if(reason == null){
Call.kick(this, kickType);
}else{
Call.kick(this, reason);
}
close();