mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-02-11 03:08:38 +07:00
Multithreading crash fixes / Server 'find' command added
This commit is contained in:
parent
537e25af9f
commit
0936fc6550
@ -1,7 +1,7 @@
|
||||
#Autogenerated file. Do not modify.
|
||||
#Fri Mar 30 19:18:12 EDT 2018
|
||||
#Sun Apr 01 11:24:59 EDT 2018
|
||||
version=release
|
||||
androidBuildCode=482
|
||||
androidBuildCode=483
|
||||
name=Mindustry
|
||||
code=3.5
|
||||
build=custom build
|
||||
|
@ -244,7 +244,7 @@ public class World extends Module{
|
||||
Array<Tile> removals = target.getLinkedTiles();
|
||||
for(Tile toremove : removals){
|
||||
//note that setting a new block automatically unlinks it
|
||||
toremove.setBlock(Blocks.air);
|
||||
if(toremove != null) toremove.setBlock(Blocks.air);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -172,6 +172,18 @@ public class Administration {
|
||||
return info.admin && ip.equals(info.validAdminIP);
|
||||
}
|
||||
|
||||
public Array<PlayerInfo> findByName(String name, boolean last){
|
||||
Array<PlayerInfo> result = new Array<>();
|
||||
|
||||
for(PlayerInfo info : playerInfo.values()){
|
||||
if(info.lastName.toLowerCase().equals(name.toLowerCase()) || (last && info.names.contains(name, false))){
|
||||
result.add(info);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public PlayerInfo getInfo(String id){
|
||||
return getCreateInfo(id);
|
||||
}
|
||||
|
@ -106,6 +106,8 @@ public class Placement {
|
||||
rect.setCenter(offset.x + x * tilesize, offset.y + y * tilesize);
|
||||
|
||||
synchronized (Entities.entityLock) {
|
||||
//exception sometimes thrown due to multithreading, not sure what else to try at this point
|
||||
try {
|
||||
for (SolidEntity e : Entities.getNearby(enemyGroup, x * tilesize, y * tilesize, tilesize * 2f)) {
|
||||
if (e == null) continue; //not sure why this happens?
|
||||
Rectangle rect = e.hitbox.getRect(e.x, e.y);
|
||||
@ -114,6 +116,9 @@ public class Placement {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}catch (Exception e){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(type.solid || type.solidifes) {
|
||||
|
@ -537,6 +537,33 @@ public class ServerControl extends Module {
|
||||
}
|
||||
});
|
||||
|
||||
handler.register("find", "<name> [check-all-names]", "Find player info(s) by name. Can optionally check for all names a player has had.", arg -> {
|
||||
boolean checkAll = arg.length == 2 && arg[1].equals("true");
|
||||
|
||||
Array<PlayerInfo> infos = netServer.admins.findByName(arg[0], checkAll);
|
||||
|
||||
if(infos.size == 1) {
|
||||
PlayerInfo info = infos.peek();
|
||||
Log.info("&lcTrace info for player '{0}' / UUID {1}:", info.lastName, info.id);
|
||||
Log.info(" &lyall names used: {0}", info.names);
|
||||
Log.info(" &lyIP: {0}", info.lastIP);
|
||||
Log.info(" &lyall IPs used: {0}", info.ips);
|
||||
Log.info(" &lytimes joined: {0}", info.timesJoined);
|
||||
Log.info(" &lytimes kicked: {0}", info.timesKicked);
|
||||
Log.info("");
|
||||
Log.info(" &lytotal blocks broken: {0}", info.totalBlocksBroken);
|
||||
Log.info(" &lytotal blocks placed: {0}", info.totalBlockPlaced);
|
||||
}else if(infos.size > 1){
|
||||
Log.info("&lcMultiple people have been found with that name:");
|
||||
for(PlayerInfo info : infos){
|
||||
Log.info(" &ly{0}", info.id);
|
||||
}
|
||||
Log.info("&lcUse the info command to examine each person individually.");
|
||||
}else{
|
||||
info("Nobody with that name could be found.");
|
||||
}
|
||||
});
|
||||
|
||||
handler.register("info", "<UUID>", "Get global info for a player's UUID.", arg -> {
|
||||
PlayerInfo info = netServer.admins.getInfoOptional(arg[0]);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user