From 14e79b50d274546a1a295ad3bbdd6832957a5de1 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 21 May 2020 16:50:49 -0400 Subject: [PATCH] Removed legacy IO code --- .../mindustry/annotations/Annotations.java | 9 -- .../annotations/impl/SerializeProcess.java | 115 ----------------- core/src/mindustry/Vars.java | 29 ++--- .../mindustry/entities/comp/ShieldComp.java | 2 +- core/src/mindustry/game/GlobalData.java | 18 +-- core/src/mindustry/io/legacy/LegacyIO.java | 36 ++++++ core/src/mindustry/maps/Maps.java | 2 +- core/src/mindustry/net/Administration.java | 121 ++++++++++++++++-- core/src/mindustry/type/SectorPreset.java | 7 - core/src/mindustry/ui/dialogs/JoinDialog.java | 13 +- .../src/mindustry/desktop/steam/SStats.java | 9 +- gradle.properties | 2 +- server/build.gradle | 2 +- 13 files changed, 181 insertions(+), 184 deletions(-) delete mode 100644 annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java create mode 100644 core/src/mindustry/io/legacy/LegacyIO.java diff --git a/annotations/src/main/java/mindustry/annotations/Annotations.java b/annotations/src/main/java/mindustry/annotations/Annotations.java index a0d74a0035..5884f3f8f1 100644 --- a/annotations/src/main/java/mindustry/annotations/Annotations.java +++ b/annotations/src/main/java/mindustry/annotations/Annotations.java @@ -124,15 +124,6 @@ public class Annotations{ 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 //region struct diff --git a/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java b/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java deleted file mode 100644 index ab3134765a..0000000000 --- a/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java +++ /dev/null @@ -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 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 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); - } - } -} diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index e89e19ae31..e6589537e6 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -9,18 +9,18 @@ import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; import arc.util.Log.*; -import arc.util.io.*; import mindustry.ai.*; import mindustry.async.*; -import mindustry.audio.LoopControl; +import mindustry.audio.*; import mindustry.core.*; import mindustry.entities.*; import mindustry.game.*; import mindustry.game.EventType.*; import mindustry.gen.*; import mindustry.input.*; -import mindustry.maps.*; +import mindustry.io.*; import mindustry.maps.Map; +import mindustry.maps.*; import mindustry.mod.*; import mindustry.net.Net; import mindustry.net.*; @@ -29,7 +29,7 @@ import java.io.*; import java.nio.charset.*; import java.util.*; -import static arc.Core.settings; +import static arc.Core.*; public class Vars implements Loadable{ /** Whether to load locales.*/ @@ -82,7 +82,7 @@ public class Vars implements Loadable{ public static final float buildingRange = 220f; /** duration of one turn in ticks */ 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; /** for map generator dialog */ public static boolean updateEditorOnChange = false; @@ -201,9 +201,7 @@ public class Vars implements Loadable{ } public static void init(){ - Serialization.init(); Groups.init(); - DefaultSerializers.typeMappings.put("mindustry.type.ContentType", "mindustry.ctype.ContentType"); if(loadLocales){ //load locales @@ -223,7 +221,7 @@ public class Vars implements Loadable{ Version.init(); - dataDirectory = Core.settings.getDataDirectory(); + dataDirectory = settings.getDataDirectory(); screenshotDirectory = dataDirectory.child("screenshots/"); customMapDirectory = dataDirectory.child("maps/"); mapPreviewDirectory = dataDirectory.child("previews/"); @@ -293,7 +291,7 @@ public class Vars implements Loadable{ public static void loadFileLogger(){ if(loadedFileLogger) return; - Core.settings.setAppName(appName); + settings.setAppName(appName); Writer writer = settings.getDataDirectory().child("last_log.txt").writer(false); LogHandler log = Log.getLogger(); @@ -313,15 +311,16 @@ public class Vars implements Loadable{ } public static void loadSettings(){ - Core.settings.setAppName(appName); + settings.setJson(JsonIO.json()); + settings.setAppName(appName); 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); - Core.keybinds.setDefaults(Binding.values()); - Core.settings.load(); + settings.defaults("locale", "default", "blocksync", true); + keybinds.setDefaults(Binding.values()); + settings.load(); Scl.setProduct(settings.getInt("uiscale", 100) / 100f); @@ -344,7 +343,7 @@ public class Vars implements Loadable{ Fi handle = Core.files.internal("bundles/bundle"); Locale locale; - String loc = Core.settings.getString("locale"); + String loc = settings.getString("locale"); if(loc.equals("default")){ locale = Locale.getDefault(); }else{ diff --git a/core/src/mindustry/entities/comp/ShieldComp.java b/core/src/mindustry/entities/comp/ShieldComp.java index 4d096b605b..0d1257b02a 100644 --- a/core/src/mindustry/entities/comp/ShieldComp.java +++ b/core/src/mindustry/entities/comp/ShieldComp.java @@ -14,7 +14,7 @@ abstract class ShieldComp implements Healthc, Posc{ /** Absorbs health damage. */ float shield; - /** Absorbs percentage of damage, up to 90% */ + /** Absorbs percentage of damage. */ float armor; /** Shield opacity. */ transient float shieldAlpha = 0f; diff --git a/core/src/mindustry/game/GlobalData.java b/core/src/mindustry/game/GlobalData.java index 2c05f8f8da..accdca9e77 100644 --- a/core/src/mindustry/game/GlobalData.java +++ b/core/src/mindustry/game/GlobalData.java @@ -22,20 +22,6 @@ public class GlobalData{ private ObjectIntMap items = new ObjectIntMap<>(); 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{ Array files = new Array<>(); files.add(Core.settings.getSettingsFile()); @@ -176,7 +162,7 @@ public class GlobalData{ @SuppressWarnings("unchecked") public void load(){ 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()){ items.put(item, Core.settings.getInt("item-" + item.name, 0)); } @@ -188,7 +174,7 @@ public class GlobalData{ } public void save(){ - Core.settings.putObject("unlocks", unlocked); + Core.settings.putJson("unlocks", unlocked); for(Item item : Vars.content.items()){ Core.settings.put("item-" + item.name, items.get(item, 0)); } diff --git a/core/src/mindustry/io/legacy/LegacyIO.java b/core/src/mindustry/io/legacy/LegacyIO.java new file mode 100644 index 0000000000..cfec4b20b5 --- /dev/null +++ b/core/src/mindustry/io/legacy/LegacyIO.java @@ -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 readServers(){ + Array 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; + } + +} diff --git a/core/src/mindustry/maps/Maps.java b/core/src/mindustry/maps/Maps.java index 7089c95943..c201ceec19 100644 --- a/core/src/mindustry/maps/Maps.java +++ b/core/src/mindustry/maps/Maps.java @@ -354,7 +354,7 @@ public class Maps{ } StringWriter buffer = new StringWriter(); - json.setWriter(buffer); + json.setWriter(new JsonWriter(buffer)); json.writeArrayStart(); for(int i = 0; i < groups.size; i++){ diff --git a/core/src/mindustry/net/Administration.java b/core/src/mindustry/net/Administration.java index 5e292229fa..5eeb765878 100644 --- a/core/src/mindustry/net/Administration.java +++ b/core/src/mindustry/net/Administration.java @@ -8,11 +8,12 @@ import arc.util.*; import arc.util.pooling.Pool.*; import arc.util.pooling.*; import mindustry.*; -import mindustry.annotations.Annotations.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; +import java.io.*; + import static mindustry.Vars.*; import static mindustry.game.EventType.*; @@ -428,18 +429,119 @@ public class Administration{ } public void save(){ - Core.settings.putObject("player-info", playerInfo); - Core.settings.putObject("banned-ips", bannedIPs); - Core.settings.putObject("whitelisted", whitelist); - Core.settings.putObject("subnet-bans", subnetBans); + Core.settings.putJson("player-data", playerInfo); + Core.settings.putJson("ip-bans", String.class, bannedIPs); + Core.settings.putJson("whitelist", String.class, whitelist); + Core.settings.putJson("banned-subnets", String.class, subnetBans); } @SuppressWarnings("unchecked") private void load(){ - playerInfo = Core.settings.getObject("player-info", ObjectMap.class, ObjectMap::new); - bannedIPs = Core.settings.getObject("banned-ips", Array.class, Array::new); - whitelist = Core.settings.getObject("whitelisted", Array.class, Array::new); - subnetBans = Core.settings.getObject("subnet-bans", Array.class, Array::new); + if(!loadLegacy()){ + //load default data + playerInfo = Core.settings.getJson("player-data", ObjectMap.class, ObjectMap::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. */ @@ -526,7 +628,6 @@ public class Administration{ } } - @Serialize public static class PlayerInfo{ public String id; public String lastName = "", lastIP = ""; diff --git a/core/src/mindustry/type/SectorPreset.java b/core/src/mindustry/type/SectorPreset.java index e381ac8e02..e05acdb577 100644 --- a/core/src/mindustry/type/SectorPreset.java +++ b/core/src/mindustry/type/SectorPreset.java @@ -134,7 +134,6 @@ public class SectorPreset extends UnlockableContent{ stacks.sort(); launchCost = stacks; - Core.settings.putObject(name + "-starting-items", startingItems); data.modified(); } @@ -154,12 +153,6 @@ public class SectorPreset extends UnlockableContent{ for(ItemStack stack : startingItems){ defaultStartingItems.add(new ItemStack(stack.item, stack.amount)); } - - @SuppressWarnings("unchecked") - Array arr = Core.settings.getObject(name + "-starting-items", Array.class, () -> null); - if(arr != null){ - startingItems = arr; - } } @Override diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index e28b310c75..3a42369adf 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -9,10 +9,10 @@ import arc.struct.*; import arc.util.*; import arc.util.serialization.*; import mindustry.*; -import mindustry.annotations.Annotations.*; import mindustry.core.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.io.legacy.*; import mindustry.net.*; import mindustry.net.Packets.*; import mindustry.ui.*; @@ -420,7 +420,13 @@ public class JoinDialog extends FloatingDialog{ @SuppressWarnings("unchecked") 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 Core.net.httpGet(becontrol.active() ? serverJsonBeURL : serverJsonURL, result -> { @@ -438,10 +444,9 @@ public class JoinDialog extends FloatingDialog{ } private void saveServers(){ - Core.settings.putObject("server-list", servers); + Core.settings.putJson("servers", Server.class, servers); } - @Serialize public static class Server{ public String ip; public int port; diff --git a/desktop/src/mindustry/desktop/steam/SStats.java b/desktop/src/mindustry/desktop/steam/SStats.java index 2ce91171a6..cc53717d10 100644 --- a/desktop/src/mindustry/desktop/steam/SStats.java +++ b/desktop/src/mindustry/desktop/steam/SStats.java @@ -20,14 +20,14 @@ public class SStats implements SteamUserStatsCallback{ public final SteamUserStats stats = new SteamUserStats(this); private boolean updated = false; - private ObjectSet mechs = new ObjectSet<>(); + //private ObjectSet mechs = new ObjectSet<>(); private int statSavePeriod = 4; //in minutes public SStats(){ stats.requestCurrentStats(); 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(){ Interval i = new Interval(); @@ -251,14 +251,15 @@ public class SStats implements SteamUserStatsCallback{ } }); + //TODO dead achievement + /* Events.on(MechChangeEvent.class, e -> { if(campaign()){ if(mechs.add(e.mech.name)){ SStat.zoneMechsUsed.max(mechs.size); - Core.settings.putObject("mechs", mechs); } } - }); + });*/ } private void trigger(Trigger trigger, SAchievement ach){ diff --git a/gradle.properties b/gradle.properties index 8237f518bb..5fab3be3d5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=49d06244c138d0c0083539760fbf643791125e6d +archash=ac0754b6f1becb59b38be1e03824e7330526ef15 diff --git a/server/build.gradle b/server/build.gradle index 9046582bf2..9260ca6d3b 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -31,7 +31,7 @@ task debug(dependsOn: classes, type: JavaExec){ debug = true } -task dist(type: Jar){ +task dist(type: Jar, dependsOn: configurations.runtimeClasspath){ from files(sourceSets.main.output.classesDirs) from files(sourceSets.main.output.resourcesDir) from {configurations.runtimeClasspath.collect{ it.isDirectory() ? it : zipTree(it) }}