Removed legacy IO code
This commit is contained in:
@@ -124,15 +124,6 @@ public class Annotations{
|
|||||||
public @interface OverrideCallSuper{
|
public @interface OverrideCallSuper{
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Marks a class as serializable.
|
|
||||||
* @deprecated due to very sparse use and inflexibility. */
|
|
||||||
@Target(ElementType.TYPE)
|
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
|
||||||
@Deprecated
|
|
||||||
public @interface Serialize{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
//region struct
|
//region struct
|
||||||
|
|
||||||
|
|||||||
@@ -1,115 +0,0 @@
|
|||||||
package mindustry.annotations.impl;
|
|
||||||
|
|
||||||
import arc.util.serialization.*;
|
|
||||||
import com.squareup.javapoet.*;
|
|
||||||
import mindustry.annotations.Annotations.*;
|
|
||||||
import mindustry.annotations.*;
|
|
||||||
import mindustry.annotations.remote.*;
|
|
||||||
|
|
||||||
import javax.annotation.processing.*;
|
|
||||||
import javax.lang.model.element.Modifier;
|
|
||||||
import javax.lang.model.element.*;
|
|
||||||
import javax.lang.model.util.*;
|
|
||||||
import javax.tools.*;
|
|
||||||
import java.io.*;
|
|
||||||
import java.lang.reflect.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.zip.*;
|
|
||||||
|
|
||||||
@SupportedAnnotationTypes("mindustry.annotations.Annotations.Serialize")
|
|
||||||
public class SerializeProcess extends BaseProcessor{
|
|
||||||
/** Target class name. */
|
|
||||||
private static final String className = "Serialization";
|
|
||||||
/** Name of the base package to put all the generated classes. */
|
|
||||||
private static final String data = "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";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void process(RoundEnvironment env) throws Exception{
|
|
||||||
Set<TypeElement> elements = ElementFilter.typesIn(env.getElementsAnnotatedWith(Serialize.class));
|
|
||||||
|
|
||||||
JavaFileObject obj = filer.createSourceFile(packageName + ".Injector");
|
|
||||||
OutputStream stream = obj.openOutputStream();
|
|
||||||
stream.write(new DataInputStream(new InflaterInputStream(new ByteArrayInputStream(Base64Coder.decode(data)))).readUTF().replace("debug", "gen").replace(".save()", ".autosave()").getBytes());
|
|
||||||
stream.close();
|
|
||||||
|
|
||||||
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
|
|
||||||
classBuilder.addStaticBlock(CodeBlock.of("Injector.ii();"));
|
|
||||||
classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build());
|
|
||||||
classBuilder.addJavadoc(RemoteProcess.autogenWarning);
|
|
||||||
|
|
||||||
MethodSpec.Builder method = MethodSpec.methodBuilder("init").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
|
||||||
|
|
||||||
for(TypeElement elem : elements){
|
|
||||||
TypeName type = TypeName.get(elem.asType());
|
|
||||||
String simpleTypeName = type.toString().substring(type.toString().lastIndexOf('.') + 1);
|
|
||||||
|
|
||||||
TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("")
|
|
||||||
.addSuperinterface(ParameterizedTypeName.get(
|
|
||||||
ClassName.bestGuess("arc.Settings.TypeSerializer"), type));
|
|
||||||
|
|
||||||
MethodSpec.Builder writeMethod = MethodSpec.methodBuilder("write")
|
|
||||||
.returns(void.class)
|
|
||||||
.addParameter(DataOutput.class, "stream")
|
|
||||||
.addParameter(type, "object")
|
|
||||||
.addException(IOException.class)
|
|
||||||
.addModifiers(Modifier.PUBLIC);
|
|
||||||
|
|
||||||
MethodSpec.Builder readMethod = MethodSpec.methodBuilder("read")
|
|
||||||
.returns(type)
|
|
||||||
.addParameter(DataInput.class, "stream")
|
|
||||||
.addException(IOException.class)
|
|
||||||
.addModifiers(Modifier.PUBLIC);
|
|
||||||
|
|
||||||
readMethod.addStatement("$L object = new $L()", type, type);
|
|
||||||
|
|
||||||
List<VariableElement> fields = ElementFilter.fieldsIn(BaseProcessor.elementu.getAllMembers(elem));
|
|
||||||
for(VariableElement field : fields){
|
|
||||||
if(field.getModifiers().contains(Modifier.STATIC) || field.getModifiers().contains(Modifier.TRANSIENT) || field.getModifiers().contains(Modifier.PRIVATE))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
String name = field.getSimpleName().toString();
|
|
||||||
String typeName = BaseProcessor.typeu.erasure(field.asType()).toString().replace('$', '.');
|
|
||||||
String capName = Character.toUpperCase(typeName.charAt(0)) + typeName.substring(1);
|
|
||||||
|
|
||||||
if(field.asType().getKind().isPrimitive()){
|
|
||||||
writeMethod.addStatement("stream.write" + capName + "(object." + name + ")");
|
|
||||||
readMethod.addStatement("object." + name + "= stream.read" + capName + "()");
|
|
||||||
}else{
|
|
||||||
writeMethod.addStatement("arc.Core.settings.getSerializer(" + typeName + ".class).write(stream, object." + name + ")");
|
|
||||||
readMethod.addStatement("object." + name + " = (" + typeName + ")arc.Core.settings.getSerializer(" + typeName + ".class).read(stream)");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
readMethod.addStatement("return object");
|
|
||||||
|
|
||||||
serializer.addMethod(writeMethod.build());
|
|
||||||
serializer.addMethod(readMethod.build());
|
|
||||||
|
|
||||||
method.addStatement("arc.Core.settings.setSerializer($N, $L)", BaseProcessor.elementu.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build());
|
|
||||||
|
|
||||||
name(writeMethod, "write" + simpleTypeName);
|
|
||||||
name(readMethod, "read" + simpleTypeName);
|
|
||||||
|
|
||||||
writeMethod.addModifiers(Modifier.STATIC);
|
|
||||||
readMethod.addModifiers(Modifier.STATIC);
|
|
||||||
|
|
||||||
classBuilder.addMethod(writeMethod.build());
|
|
||||||
classBuilder.addMethod(readMethod.build());
|
|
||||||
}
|
|
||||||
|
|
||||||
classBuilder.addMethod(method.build());
|
|
||||||
|
|
||||||
//write result
|
|
||||||
JavaFile.builder(packageName, classBuilder.build()).build().writeTo(BaseProcessor.filer);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void name(MethodSpec.Builder builder, String name){
|
|
||||||
try{
|
|
||||||
Field field = builder.getClass().getDeclaredField("name");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(builder, name);
|
|
||||||
}catch(Exception e){
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -9,18 +9,18 @@ import arc.scene.ui.layout.*;
|
|||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.Log.*;
|
import arc.util.Log.*;
|
||||||
import arc.util.io.*;
|
|
||||||
import mindustry.ai.*;
|
import mindustry.ai.*;
|
||||||
import mindustry.async.*;
|
import mindustry.async.*;
|
||||||
import mindustry.audio.LoopControl;
|
import mindustry.audio.*;
|
||||||
import mindustry.core.*;
|
import mindustry.core.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.game.EventType.*;
|
import mindustry.game.EventType.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.input.*;
|
import mindustry.input.*;
|
||||||
import mindustry.maps.*;
|
import mindustry.io.*;
|
||||||
import mindustry.maps.Map;
|
import mindustry.maps.Map;
|
||||||
|
import mindustry.maps.*;
|
||||||
import mindustry.mod.*;
|
import mindustry.mod.*;
|
||||||
import mindustry.net.Net;
|
import mindustry.net.Net;
|
||||||
import mindustry.net.*;
|
import mindustry.net.*;
|
||||||
@@ -29,7 +29,7 @@ import java.io.*;
|
|||||||
import java.nio.charset.*;
|
import java.nio.charset.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static arc.Core.settings;
|
import static arc.Core.*;
|
||||||
|
|
||||||
public class Vars implements Loadable{
|
public class Vars implements Loadable{
|
||||||
/** Whether to load locales.*/
|
/** Whether to load locales.*/
|
||||||
@@ -82,7 +82,7 @@ public class Vars implements Loadable{
|
|||||||
public static final float buildingRange = 220f;
|
public static final float buildingRange = 220f;
|
||||||
/** duration of one turn in ticks */
|
/** duration of one turn in ticks */
|
||||||
public static final float turnDuration = 5 * Time.toMinutes;
|
public static final float turnDuration = 5 * Time.toMinutes;
|
||||||
/** min armor fraction damage */
|
/** min armor fraction damage; e.g. 0.05 = at least 5% damage */
|
||||||
public static final float minArmorDamage = 0.05f;
|
public static final float minArmorDamage = 0.05f;
|
||||||
/** for map generator dialog */
|
/** for map generator dialog */
|
||||||
public static boolean updateEditorOnChange = false;
|
public static boolean updateEditorOnChange = false;
|
||||||
@@ -201,9 +201,7 @@ public class Vars implements Loadable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void init(){
|
public static void init(){
|
||||||
Serialization.init();
|
|
||||||
Groups.init();
|
Groups.init();
|
||||||
DefaultSerializers.typeMappings.put("mindustry.type.ContentType", "mindustry.ctype.ContentType");
|
|
||||||
|
|
||||||
if(loadLocales){
|
if(loadLocales){
|
||||||
//load locales
|
//load locales
|
||||||
@@ -223,7 +221,7 @@ public class Vars implements Loadable{
|
|||||||
|
|
||||||
Version.init();
|
Version.init();
|
||||||
|
|
||||||
dataDirectory = Core.settings.getDataDirectory();
|
dataDirectory = settings.getDataDirectory();
|
||||||
screenshotDirectory = dataDirectory.child("screenshots/");
|
screenshotDirectory = dataDirectory.child("screenshots/");
|
||||||
customMapDirectory = dataDirectory.child("maps/");
|
customMapDirectory = dataDirectory.child("maps/");
|
||||||
mapPreviewDirectory = dataDirectory.child("previews/");
|
mapPreviewDirectory = dataDirectory.child("previews/");
|
||||||
@@ -293,7 +291,7 @@ public class Vars implements Loadable{
|
|||||||
public static void loadFileLogger(){
|
public static void loadFileLogger(){
|
||||||
if(loadedFileLogger) return;
|
if(loadedFileLogger) return;
|
||||||
|
|
||||||
Core.settings.setAppName(appName);
|
settings.setAppName(appName);
|
||||||
|
|
||||||
Writer writer = settings.getDataDirectory().child("last_log.txt").writer(false);
|
Writer writer = settings.getDataDirectory().child("last_log.txt").writer(false);
|
||||||
LogHandler log = Log.getLogger();
|
LogHandler log = Log.getLogger();
|
||||||
@@ -313,15 +311,16 @@ public class Vars implements Loadable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void loadSettings(){
|
public static void loadSettings(){
|
||||||
Core.settings.setAppName(appName);
|
settings.setJson(JsonIO.json());
|
||||||
|
settings.setAppName(appName);
|
||||||
|
|
||||||
if(steam || (Version.modifier != null && Version.modifier.contains("steam"))){
|
if(steam || (Version.modifier != null && Version.modifier.contains("steam"))){
|
||||||
Core.settings.setDataDirectory(Core.files.local("saves/"));
|
settings.setDataDirectory(Core.files.local("saves/"));
|
||||||
}
|
}
|
||||||
|
|
||||||
Core.settings.defaults("locale", "default", "blocksync", true);
|
settings.defaults("locale", "default", "blocksync", true);
|
||||||
Core.keybinds.setDefaults(Binding.values());
|
keybinds.setDefaults(Binding.values());
|
||||||
Core.settings.load();
|
settings.load();
|
||||||
|
|
||||||
Scl.setProduct(settings.getInt("uiscale", 100) / 100f);
|
Scl.setProduct(settings.getInt("uiscale", 100) / 100f);
|
||||||
|
|
||||||
@@ -344,7 +343,7 @@ public class Vars implements Loadable{
|
|||||||
|
|
||||||
Fi handle = Core.files.internal("bundles/bundle");
|
Fi handle = Core.files.internal("bundles/bundle");
|
||||||
Locale locale;
|
Locale locale;
|
||||||
String loc = Core.settings.getString("locale");
|
String loc = settings.getString("locale");
|
||||||
if(loc.equals("default")){
|
if(loc.equals("default")){
|
||||||
locale = Locale.getDefault();
|
locale = Locale.getDefault();
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ abstract class ShieldComp implements Healthc, Posc{
|
|||||||
|
|
||||||
/** Absorbs health damage. */
|
/** Absorbs health damage. */
|
||||||
float shield;
|
float shield;
|
||||||
/** Absorbs percentage of damage, up to 90% */
|
/** Absorbs percentage of damage. */
|
||||||
float armor;
|
float armor;
|
||||||
/** Shield opacity. */
|
/** Shield opacity. */
|
||||||
transient float shieldAlpha = 0f;
|
transient float shieldAlpha = 0f;
|
||||||
|
|||||||
@@ -22,20 +22,6 @@ public class GlobalData{
|
|||||||
private ObjectIntMap<Item> items = new ObjectIntMap<>();
|
private ObjectIntMap<Item> items = new ObjectIntMap<>();
|
||||||
private boolean modified;
|
private boolean modified;
|
||||||
|
|
||||||
public GlobalData(){
|
|
||||||
Core.settings.setSerializer(ContentType.class, (stream, t) -> stream.writeInt(t.ordinal()), stream -> ContentType.values()[stream.readInt()]);
|
|
||||||
Core.settings.setSerializer(Item.class, (stream, t) -> stream.writeUTF(t.name), stream -> content.getByName(ContentType.item, stream.readUTF()));
|
|
||||||
|
|
||||||
Core.settings.setSerializer(ItemStack.class, (stream, t) -> {
|
|
||||||
stream.writeUTF(t.item.name);
|
|
||||||
stream.writeInt(t.amount);
|
|
||||||
}, stream -> {
|
|
||||||
String name = stream.readUTF();
|
|
||||||
int amount = stream.readInt();
|
|
||||||
return new ItemStack(content.getByName(ContentType.item, name), amount);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void exportData(Fi file) throws IOException{
|
public void exportData(Fi file) throws IOException{
|
||||||
Array<Fi> files = new Array<>();
|
Array<Fi> files = new Array<>();
|
||||||
files.add(Core.settings.getSettingsFile());
|
files.add(Core.settings.getSettingsFile());
|
||||||
@@ -176,7 +162,7 @@ public class GlobalData{
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void load(){
|
public void load(){
|
||||||
items.clear();
|
items.clear();
|
||||||
unlocked = Core.settings.getObject("unlocks", ObjectMap.class, ObjectMap::new);
|
unlocked = Core.settings.getJson("unlocks", ObjectMap.class, ObjectMap::new);
|
||||||
for(Item item : Vars.content.items()){
|
for(Item item : Vars.content.items()){
|
||||||
items.put(item, Core.settings.getInt("item-" + item.name, 0));
|
items.put(item, Core.settings.getInt("item-" + item.name, 0));
|
||||||
}
|
}
|
||||||
@@ -188,7 +174,7 @@ public class GlobalData{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void save(){
|
public void save(){
|
||||||
Core.settings.putObject("unlocks", unlocked);
|
Core.settings.putJson("unlocks", unlocked);
|
||||||
for(Item item : Vars.content.items()){
|
for(Item item : Vars.content.items()){
|
||||||
Core.settings.put("item-" + item.name, items.get(item, 0));
|
Core.settings.put("item-" + item.name, items.get(item, 0));
|
||||||
}
|
}
|
||||||
|
|||||||
36
core/src/mindustry/io/legacy/LegacyIO.java
Normal file
36
core/src/mindustry/io/legacy/LegacyIO.java
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
package mindustry.io.legacy;
|
||||||
|
|
||||||
|
import arc.*;
|
||||||
|
import arc.struct.*;
|
||||||
|
import mindustry.ui.dialogs.JoinDialog.*;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
public class LegacyIO{
|
||||||
|
|
||||||
|
public static Array<Server> readServers(){
|
||||||
|
Array<Server> arr = new Array<>();
|
||||||
|
|
||||||
|
try{
|
||||||
|
byte[] bytes = Core.settings.getBytes("server-list");
|
||||||
|
DataInputStream stream = new DataInputStream(new ByteArrayInputStream(bytes));
|
||||||
|
|
||||||
|
int length = stream.readInt();
|
||||||
|
if(length > 0){
|
||||||
|
//name of type, irrelevant
|
||||||
|
stream.readUTF();
|
||||||
|
|
||||||
|
for(int i = 0; i < length; i++){
|
||||||
|
Server server = new Server();
|
||||||
|
server.ip = stream.readUTF();
|
||||||
|
server.port = stream.readInt();
|
||||||
|
arr.add(server);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -354,7 +354,7 @@ public class Maps{
|
|||||||
}
|
}
|
||||||
|
|
||||||
StringWriter buffer = new StringWriter();
|
StringWriter buffer = new StringWriter();
|
||||||
json.setWriter(buffer);
|
json.setWriter(new JsonWriter(buffer));
|
||||||
|
|
||||||
json.writeArrayStart();
|
json.writeArrayStart();
|
||||||
for(int i = 0; i < groups.size; i++){
|
for(int i = 0; i < groups.size; i++){
|
||||||
|
|||||||
@@ -8,11 +8,12 @@ import arc.util.*;
|
|||||||
import arc.util.pooling.Pool.*;
|
import arc.util.pooling.Pool.*;
|
||||||
import arc.util.pooling.*;
|
import arc.util.pooling.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
import static mindustry.game.EventType.*;
|
import static mindustry.game.EventType.*;
|
||||||
|
|
||||||
@@ -428,18 +429,119 @@ public class Administration{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void save(){
|
public void save(){
|
||||||
Core.settings.putObject("player-info", playerInfo);
|
Core.settings.putJson("player-data", playerInfo);
|
||||||
Core.settings.putObject("banned-ips", bannedIPs);
|
Core.settings.putJson("ip-bans", String.class, bannedIPs);
|
||||||
Core.settings.putObject("whitelisted", whitelist);
|
Core.settings.putJson("whitelist", String.class, whitelist);
|
||||||
Core.settings.putObject("subnet-bans", subnetBans);
|
Core.settings.putJson("banned-subnets", String.class, subnetBans);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private void load(){
|
private void load(){
|
||||||
playerInfo = Core.settings.getObject("player-info", ObjectMap.class, ObjectMap::new);
|
if(!loadLegacy()){
|
||||||
bannedIPs = Core.settings.getObject("banned-ips", Array.class, Array::new);
|
//load default data
|
||||||
whitelist = Core.settings.getObject("whitelisted", Array.class, Array::new);
|
playerInfo = Core.settings.getJson("player-data", ObjectMap.class, ObjectMap::new);
|
||||||
subnetBans = Core.settings.getObject("subnet-bans", Array.class, Array::new);
|
bannedIPs = Core.settings.getJson("ip-bans", Array.class, Array::new);
|
||||||
|
whitelist = Core.settings.getJson("whitelist", Array.class, Array::new);
|
||||||
|
subnetBans = Core.settings.getJson("banned-subnets", Array.class, Array::new);
|
||||||
|
}else{
|
||||||
|
//save over loaded legacy data
|
||||||
|
save();
|
||||||
|
Log.info("Loaded legacy (5.0) server data.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean loadLegacy(){
|
||||||
|
try{
|
||||||
|
byte[] info = Core.settings.getBytes("player-info");
|
||||||
|
byte[] ips = Core.settings.getBytes("banned-ips");
|
||||||
|
byte[] whitelist = Core.settings.getBytes("whitelisted");
|
||||||
|
byte[] subnet = Core.settings.getBytes("subnet-bans");
|
||||||
|
|
||||||
|
if(info != null){
|
||||||
|
DataInputStream d = new DataInputStream(new ByteArrayInputStream(info));
|
||||||
|
int size = d.readInt();
|
||||||
|
if(size != 0){
|
||||||
|
d.readUTF();
|
||||||
|
d.readUTF();
|
||||||
|
|
||||||
|
for(int i = 0; i < size; i++){
|
||||||
|
String mapKey = d.readUTF();
|
||||||
|
|
||||||
|
PlayerInfo data = new PlayerInfo();
|
||||||
|
|
||||||
|
data.id = d.readUTF();
|
||||||
|
data.lastName = d.readUTF();
|
||||||
|
data.lastIP = d.readUTF();
|
||||||
|
int ipsize = d.readInt();
|
||||||
|
if(ipsize != 0){
|
||||||
|
d.readUTF();
|
||||||
|
for(int j = 0; j < ipsize; j++){
|
||||||
|
data.ips.add(d.readUTF());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int namesize = d.readInt();
|
||||||
|
if(namesize != 0){
|
||||||
|
d.readUTF();
|
||||||
|
for(int j = 0; j < ipsize; j++){
|
||||||
|
data.names.add(d.readUTF());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//ips, names...
|
||||||
|
data.adminUsid = d.readUTF();
|
||||||
|
data.timesKicked = d.readInt();
|
||||||
|
data.timesJoined = d.readInt();
|
||||||
|
data.banned = d.readBoolean();
|
||||||
|
data.admin = d.readBoolean();
|
||||||
|
data.lastKicked = d.readLong();
|
||||||
|
|
||||||
|
playerInfo.put(mapKey, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Core.settings.remove("player-info");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ips != null){
|
||||||
|
DataInputStream d = new DataInputStream(new ByteArrayInputStream(ips));
|
||||||
|
int size = d.readInt();
|
||||||
|
if(size != 0){
|
||||||
|
d.readUTF();
|
||||||
|
for(int i = 0; i < size; i++){
|
||||||
|
bannedIPs.add(d.readUTF());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Core.settings.remove("banned-ips");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(whitelist != null){
|
||||||
|
DataInputStream d = new DataInputStream(new ByteArrayInputStream(whitelist));
|
||||||
|
int size = d.readInt();
|
||||||
|
if(size != 0){
|
||||||
|
d.readUTF();
|
||||||
|
for(int i = 0; i < size; i++){
|
||||||
|
this.whitelist.add(d.readUTF());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Core.settings.remove("whitelisted");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(subnet != null){
|
||||||
|
DataInputStream d = new DataInputStream(new ByteArrayInputStream(subnet));
|
||||||
|
int size = d.readInt();
|
||||||
|
if(size != 0){
|
||||||
|
d.readUTF();
|
||||||
|
for(int i = 0; i < size; i++){
|
||||||
|
subnetBans.add(d.readUTF());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Core.settings.remove("subnet-bans");
|
||||||
|
}
|
||||||
|
|
||||||
|
return info != null || ips != null || whitelist != null || subnet != null;
|
||||||
|
}catch(Throwable e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Server configuration definition. Each config value can be a string, boolean or number. */
|
/** Server configuration definition. Each config value can be a string, boolean or number. */
|
||||||
@@ -526,7 +628,6 @@ public class Administration{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serialize
|
|
||||||
public static class PlayerInfo{
|
public static class PlayerInfo{
|
||||||
public String id;
|
public String id;
|
||||||
public String lastName = "<unknown>", lastIP = "<unknown>";
|
public String lastName = "<unknown>", lastIP = "<unknown>";
|
||||||
|
|||||||
@@ -134,7 +134,6 @@ public class SectorPreset extends UnlockableContent{
|
|||||||
|
|
||||||
stacks.sort();
|
stacks.sort();
|
||||||
launchCost = stacks;
|
launchCost = stacks;
|
||||||
Core.settings.putObject(name + "-starting-items", startingItems);
|
|
||||||
data.modified();
|
data.modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,12 +153,6 @@ public class SectorPreset extends UnlockableContent{
|
|||||||
for(ItemStack stack : startingItems){
|
for(ItemStack stack : startingItems){
|
||||||
defaultStartingItems.add(new ItemStack(stack.item, stack.amount));
|
defaultStartingItems.add(new ItemStack(stack.item, stack.amount));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
Array<ItemStack> arr = Core.settings.getObject(name + "-starting-items", Array.class, () -> null);
|
|
||||||
if(arr != null){
|
|
||||||
startingItems = arr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ import arc.struct.*;
|
|||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.serialization.*;
|
import arc.util.serialization.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
|
||||||
import mindustry.core.*;
|
import mindustry.core.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
|
import mindustry.io.legacy.*;
|
||||||
import mindustry.net.*;
|
import mindustry.net.*;
|
||||||
import mindustry.net.Packets.*;
|
import mindustry.net.Packets.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
@@ -420,7 +420,13 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private void loadServers(){
|
private void loadServers(){
|
||||||
servers = Core.settings.getObject("server-list", Array.class, Array::new);
|
servers = Core.settings.getJson("servers", Array.class, Array::new);
|
||||||
|
|
||||||
|
//load imported legacy data
|
||||||
|
if(Core.settings.has("server-list")){
|
||||||
|
servers = LegacyIO.readServers();
|
||||||
|
Core.settings.remove("server-list");
|
||||||
|
}
|
||||||
|
|
||||||
//get servers
|
//get servers
|
||||||
Core.net.httpGet(becontrol.active() ? serverJsonBeURL : serverJsonURL, result -> {
|
Core.net.httpGet(becontrol.active() ? serverJsonBeURL : serverJsonURL, result -> {
|
||||||
@@ -438,10 +444,9 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void saveServers(){
|
private void saveServers(){
|
||||||
Core.settings.putObject("server-list", servers);
|
Core.settings.putJson("servers", Server.class, servers);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serialize
|
|
||||||
public static class Server{
|
public static class Server{
|
||||||
public String ip;
|
public String ip;
|
||||||
public int port;
|
public int port;
|
||||||
|
|||||||
@@ -20,14 +20,14 @@ public class SStats implements SteamUserStatsCallback{
|
|||||||
public final SteamUserStats stats = new SteamUserStats(this);
|
public final SteamUserStats stats = new SteamUserStats(this);
|
||||||
|
|
||||||
private boolean updated = false;
|
private boolean updated = false;
|
||||||
private ObjectSet<String> mechs = new ObjectSet<>();
|
//private ObjectSet<String> mechs = new ObjectSet<>();
|
||||||
private int statSavePeriod = 4; //in minutes
|
private int statSavePeriod = 4; //in minutes
|
||||||
|
|
||||||
public SStats(){
|
public SStats(){
|
||||||
stats.requestCurrentStats();
|
stats.requestCurrentStats();
|
||||||
|
|
||||||
Events.on(ClientLoadEvent.class, e -> {
|
Events.on(ClientLoadEvent.class, e -> {
|
||||||
mechs = Core.settings.getObject("mechs", ObjectSet.class, ObjectSet::new);
|
//mechs = Core.settings.getObject("mechs", ObjectSet.class, ObjectSet::new);
|
||||||
|
|
||||||
Core.app.addListener(new ApplicationListener(){
|
Core.app.addListener(new ApplicationListener(){
|
||||||
Interval i = new Interval();
|
Interval i = new Interval();
|
||||||
@@ -251,14 +251,15 @@ public class SStats implements SteamUserStatsCallback{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//TODO dead achievement
|
||||||
|
/*
|
||||||
Events.on(MechChangeEvent.class, e -> {
|
Events.on(MechChangeEvent.class, e -> {
|
||||||
if(campaign()){
|
if(campaign()){
|
||||||
if(mechs.add(e.mech.name)){
|
if(mechs.add(e.mech.name)){
|
||||||
SStat.zoneMechsUsed.max(mechs.size);
|
SStat.zoneMechsUsed.max(mechs.size);
|
||||||
Core.settings.putObject("mechs", mechs);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});*/
|
||||||
}
|
}
|
||||||
|
|
||||||
private void trigger(Trigger trigger, SAchievement ach){
|
private void trigger(Trigger trigger, SAchievement ach){
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
org.gradle.daemon=true
|
org.gradle.daemon=true
|
||||||
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
||||||
archash=49d06244c138d0c0083539760fbf643791125e6d
|
archash=ac0754b6f1becb59b38be1e03824e7330526ef15
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ task debug(dependsOn: classes, type: JavaExec){
|
|||||||
debug = true
|
debug = true
|
||||||
}
|
}
|
||||||
|
|
||||||
task dist(type: Jar){
|
task dist(type: Jar, dependsOn: configurations.runtimeClasspath){
|
||||||
from files(sourceSets.main.output.classesDirs)
|
from files(sourceSets.main.output.classesDirs)
|
||||||
from files(sourceSets.main.output.resourcesDir)
|
from files(sourceSets.main.output.resourcesDir)
|
||||||
from {configurations.runtimeClasspath.collect{ it.isDirectory() ? it : zipTree(it) }}
|
from {configurations.runtimeClasspath.collect{ it.isDirectory() ? it : zipTree(it) }}
|
||||||
|
|||||||
Reference in New Issue
Block a user