Made beam drills rotate on mobile again / Server player name regex blacklist

This commit is contained in:
Anuken
2025-12-26 15:09:17 -05:00
parent a226d98116
commit c3b8abf3e5
6 changed files with 73 additions and 3 deletions

View File

@@ -170,7 +170,8 @@ public class NetServer implements ApplicationListener{
return;
}
if(admins.isIDBanned(uuid)){
//there's no reason to tell users that their name is inappropriate, as they may try to bypass it
if(admins.isIDBanned(uuid) || admins.isNameBanned(packet.name)){
con.kick(KickReason.banned);
return;
}

View File

@@ -13,6 +13,8 @@ import mindustry.type.*;
import mindustry.world.*;
import mindustry.world.blocks.payloads.*;
import java.util.regex.*;
import static mindustry.Vars.*;
import static mindustry.game.EventType.*;
@@ -24,6 +26,7 @@ public class Administration{
public Seq<String> subnetBans = new Seq<>();
public ObjectSet<String> dosBlacklist = new ObjectSet<>();
public ObjectMap<String, Long> kickedIPs = new ObjectMap<>();
public Seq<Pattern> bannedNames = new Seq<>();
private boolean modified, loaded;
/** All player info. Maps UUIDs to info. This persists throughout restarts. Do not modify directly. */
@@ -131,6 +134,11 @@ public class Administration{
return subnetBans.contains(ip::startsWith);
}
public void addNameBan(String regex) throws PatternSyntaxException{
bannedNames.add(Pattern.compile(regex, Pattern.CASE_INSENSITIVE));
save();
}
/** Adds a chat filter. This will transform the chat messages of every player.
* This functionality can be used to implement things like swear filters and special commands.
* Note that commands (starting with /) are not filtered.*/
@@ -376,6 +384,10 @@ public class Administration{
return getCreateInfo(uuid).banned;
}
public boolean isNameBanned(String name){
return bannedNames.size > 0 && bannedNames.contains(p -> p.matcher(name).find());
}
public boolean isAdmin(String id, String usid){
PlayerInfo info = getCreateInfo(id);
return info.admin && usid.equals(info.adminUsid);
@@ -464,6 +476,7 @@ public class Administration{
Core.settings.putJson("ip-bans", String.class, bannedIPs);
Core.settings.putJson("whitelist-ids", String.class, whitelist);
Core.settings.putJson("banned-subnets", String.class, subnetBans);
Core.settings.putJson("banned-names", String.class, bannedNames.map(Pattern::pattern));
modified = false;
}
}
@@ -477,6 +490,14 @@ public class Administration{
bannedIPs = Core.settings.getJson("ip-bans", Seq.class, Seq::new);
whitelist = Core.settings.getJson("whitelist-ids", Seq.class, Seq::new);
subnetBans = Core.settings.getJson("banned-subnets", Seq.class, Seq::new);
Seq<String> nameRegexes = Core.settings.getJson("banned-names", Seq.class, String.class, Seq::new);
for(var regex : nameRegexes){
try{
bannedNames.add(Pattern.compile(regex, Pattern.CASE_INSENSITIVE));
}catch(Exception ignored){
}
}
}
/**

View File

@@ -1500,6 +1500,9 @@ public class UnitType extends UnlockableContent implements Senseable{
Draw.z(z);
if(unit instanceof Crawlc c){
if(isPayload){
c.segmentRot(c.rotation());
}
drawCrawl(c);
}

View File

@@ -69,7 +69,7 @@ public class BeamDrill extends Block{
solid = true;
drawArrow = false;
regionRotated1 = 1;
ignoreLineRotation = true;
if(!mobile) ignoreLineRotation = true;
ambientSoundVolume = 0.05f;
ambientSound = Sounds.loopMineBeam;

View File

@@ -57,7 +57,7 @@ public class WallCrafter extends Block{
rotate = true;
update = true;
solid = true;
ignoreLineRotation = true;
if(!mobile) ignoreLineRotation = true;
regionRotated1 = 1;
envEnabled |= Env.space;