diff --git a/.idea/libraries/android_lint.xml b/.idea/libraries/android_lint.xml
deleted file mode 100644
index 6e3e4b9b0..000000000
--- a/.idea/libraries/android_lint.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/io_github_classgraph.xml b/.idea/libraries/io_github_classgraph.xml
new file mode 100644
index 000000000..938254d35
--- /dev/null
+++ b/.idea/libraries/io_github_classgraph.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ModuleComputers/ModuleComputers.iml b/ModuleComputers/ModuleComputers.iml
index 71633623d..b6f9df865 100644
--- a/ModuleComputers/ModuleComputers.iml
+++ b/ModuleComputers/ModuleComputers.iml
@@ -16,6 +16,6 @@
-
+
\ No newline at end of file
diff --git a/TerrarumBuild.iml b/TerrarumBuild.iml
index d564708a8..0bad4ebf2 100644
--- a/TerrarumBuild.iml
+++ b/TerrarumBuild.iml
@@ -24,6 +24,6 @@
-
+
\ No newline at end of file
diff --git a/lib/classgraph-4.8.157-javadoc.jar b/lib/classgraph-4.8.157-javadoc.jar
new file mode 100644
index 000000000..34f5934f4
--- /dev/null
+++ b/lib/classgraph-4.8.157-javadoc.jar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:34a1fdfa7fe17598754e2adabbdc619b6c4db77e1a76357470d676383bb29d90
+size 926644
diff --git a/lib/classgraph-4.8.157-sources.jar b/lib/classgraph-4.8.157-sources.jar
new file mode 100644
index 000000000..8e8652a8d
--- /dev/null
+++ b/lib/classgraph-4.8.157-sources.jar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1a74301da9a729a2cb614b2350fcb5d782b3e75ef305a0a107847481966cb128
+size 512990
diff --git a/lib/classgraph-4.8.157.jar b/lib/classgraph-4.8.157.jar
new file mode 100644
index 000000000..328339e76
--- /dev/null
+++ b/lib/classgraph-4.8.157.jar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:38be6bbbbb06110f7683dc4b04964d9ca4d32fdeeace58169aab8f16b592aabe
+size 564333
diff --git a/src/net/torvald/terrarum/QuickDirtyLint.kt b/src/net/torvald/terrarum/QuickDirtyLint.kt
new file mode 100644
index 000000000..0978c6251
--- /dev/null
+++ b/src/net/torvald/terrarum/QuickDirtyLint.kt
@@ -0,0 +1,114 @@
+package net.torvald.terrarum
+
+import io.github.classgraph.ClassGraph
+import io.github.classgraph.ClassInfo
+import net.torvald.random.HQRNG
+import net.torvald.terrarum.gameactors.Actor
+import net.torvald.terrarum.gameitems.GameItem
+import java.util.*
+
+/**
+ * Created by minjaesong on 2023-05-22.
+ */
+fun main() {
+
+ val superClasses = listOf(
+ Actor::class.java,
+ GameItem::class.java
+ )
+
+ val serialisablePrimitives = listOf(
+ // comparison: exact match
+ "Z",
+ "B",
+ "S",
+ "I",
+ "J",
+ "F",
+ "D",
+ ).flatMap { listOf(it, "[$it") }
+
+ val serialisableTypes = listOf(
+ // arrays: has '[' prepended
+ // comparison: startsWith
+
+ // primitives
+ "Ljava/lang/String", // includes ZipCodedStr
+ "Ljava/lang/Boolean",
+ "Ljava/lang/Byte",
+ "Ljava/lang/Short",
+ "Ljava/lang/Integer",
+ "Ljava/lang/Long",
+ "Ljava/lang/Float",
+ "Ljava/lang/Double",
+ // has serialiser on net.torvald.terrarum.serialise.Common
+ "Ljava/math/BigInteger",
+ "Ljava/util/UUID",
+ "Ljava/util/HashMap",
+ "Ljava/util/HashSet",
+ "Ljava/util/ArrayList",
+ "Lnet/torvald/terrarum/gameworld/BlockLayer",
+ "Lnet/torvald/terrarum/gameworld/WorldTime",
+ // complex types
+ "Lnet/torvald/gdx/graphics/Cvec",
+ "Lnet/torvald/random/HQRNG",
+ "Lnet/torvald/spriteanimation/SpriteAnimation",
+ "Lnet/torvald/terrarum/Codex",
+ "Lnet/torvald/terrarum/Point2d",
+ "Lnet/torvald/terrarum/Point2i",
+ "Lnet/torvald/terrarum/KVHashMap",
+ "Lnet/torvald/terrarum/gameactors/Actor\$RenderOrder",
+ "Lnet/torvald/terrarum/gameactors/ActorValue",
+ "Lnet/torvald/terrarum/gameactors/Hitbox",
+ "Lnet/torvald/terrarum/gameactors/Lightbox",
+ "Lnet/torvald/terrarum/gameactors/PhysProperties",
+ "Lnet/torvald/terrarum/gameitems/GameItem",
+ "Lnet/torvald/terrarum/utils/HashArray",
+ "Lnet/torvald/terrarum/utils/HashedWirings",
+ "Lnet/torvald/terrarum/utils/HashedWiringGraph",
+ "Lnet/torvald/terrarum/utils/WiringGraphMap",
+ "Lnet/torvald/terrarum/savegame/ByteArray64",
+ "Lnet/torvald/terrarum/modulebasegame/gameactors/ActorInventory",
+ "Lnet/torvald/terrarum/modulebasegame/gameactors/BlockBox",
+ "Lnet/torvald/terrarum/modulebasegame/gameactors/FixtureInventory",
+ "Lkotlin/ranges/IntRange",
+ "Lorg/dyn4j/geometry/Vector2",
+ "Lcom/badlogic/gdx/graphics/Color",
+ // subclasses
+ "Lnet/torvald/terrarum/gameactors/BlockMarkerActor",
+ "Lnet/torvald/terrarum/gameactors/Actor",
+ "Lnet/torvald/terrarum/gameactors/ActorWithBody",
+ "Lnet/torvald/terrarum/gameactors/ActorHumanoid",
+ // composite types
+ "Lkotlin/Pair"
+ ).flatMap { listOf(it, "[$it") }
+
+ val classaNonGrata = listOf(
+ "net.torvald.terrarum.modulebasegame.MovableWorldCamera"
+ )
+
+ ClassGraph().acceptPackages("net.torvald.terrarum")/*.verbose()*/.enableAllInfo().scan().let { scan ->
+ val offendingFields = scan.allClasses.filter { classinfo ->
+ superClasses.any { classinfo.extendsSuperclass(it) || classinfo.name == it.canonicalName } &&
+ !classaNonGrata.contains(classinfo.name)
+ }.flatMap { clazz ->
+ clazz.declaredFieldInfo.filter { field ->
+ !field.isTransient &&
+ !field.isEnum &&
+ !serialisablePrimitives.contains(field.typeSignatureOrTypeDescriptorStr) &&
+ serialisableTypes.none { field.typeSignatureOrTypeDescriptorStr.startsWith(it) } &&
+ !field.typeSignatureOrTypeDescriptorStr.endsWith("\$Companion;") &&
+ !field.className.contains("$") &&
+ !field.name.contains("$")
+ }
+ }
+
+// println(offendingFields)
+
+ offendingFields.forEach {
+ println("\u001B[1m${it.name}\u001B[m\n\t\u001B[32mfrom: \u001B[m${it.className}\n\t\u001B[32mtype: \u001B[m${it.typeSignatureOrTypeDescriptorStr}")
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/net/torvald/terrarum/UnserialisableTypeIssueRegistry.kt b/src/net/torvald/terrarum/UnserialisableTypeIssueRegistry.kt
index 4ea2b02d4..ce8ac0b44 100644
--- a/src/net/torvald/terrarum/UnserialisableTypeIssueRegistry.kt
+++ b/src/net/torvald/terrarum/UnserialisableTypeIssueRegistry.kt
@@ -1,6 +1,6 @@
package net.torvald.terrarum
-import com.android.tools.lint.client.api.IssueRegistry
+/*import com.android.tools.lint.client.api.IssueRegistry
import com.android.tools.lint.client.api.UElementHandler
import com.android.tools.lint.detector.api.*
import net.torvald.random.HQRNG
@@ -94,4 +94,4 @@ class TerrarumNonTransientUnserialisableType : Detector(), Detector.UastScanner
}
}
}
-}
+}*/
diff --git a/src/net/torvald/terrarum/gameactors/Actor.kt b/src/net/torvald/terrarum/gameactors/Actor.kt
index e2d46f56f..ed974d2af 100644
--- a/src/net/torvald/terrarum/gameactors/Actor.kt
+++ b/src/net/torvald/terrarum/gameactors/Actor.kt
@@ -1,8 +1,10 @@
package net.torvald.terrarum.gameactors
import net.torvald.random.HQRNG
+import net.torvald.terrarum.INGAME
import net.torvald.terrarum.ReferencingRanges
import net.torvald.terrarum.Terrarum
+import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid
import net.torvald.terrarum.modulebasegame.gameactors.Pocketed
import net.torvald.terrarum.savegame.toBigEndian
import net.torvald.terrarum.utils.PasswordBase32
@@ -82,6 +84,9 @@ abstract class Actor : Comparable, Runnable {
if (this is Pocketed)
inventory.actor = this
+ if (this is ActorHumanoid && vehicleRidingActorID != null) {
+ vehicleRiding = INGAME.getActorByID(vehicleRidingActorID!!) as Controllable
+ }
}
/**
diff --git a/src/net/torvald/terrarum/gameitems/GameItem.kt b/src/net/torvald/terrarum/gameitems/GameItem.kt
index b4c9a54b3..28a90c286 100644
--- a/src/net/torvald/terrarum/gameitems/GameItem.kt
+++ b/src/net/torvald/terrarum/gameitems/GameItem.kt
@@ -13,6 +13,9 @@ import net.torvald.terrarum.itemproperties.Material
import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory
import net.torvald.terrarum.modulebasegame.gameactors.Pocketed
+import net.torvald.terrarum.savegame.ByteArray64
+import net.torvald.terrarum.utils.HashArray
+import net.torvald.terrarum.utils.ZipCodedStr
import org.dyn4j.geometry.Vector2
typealias ItemID = String
diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt
index 270031882..097fa6872 100644
--- a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt
+++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt
@@ -37,8 +37,8 @@ open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, L
this.physProp = physProp
}
- var vehicleRiding: Controllable? = null // usually player only
-
+ @Transient internal var vehicleRiding: Controllable? = null // usually player only
+ var vehicleRidingActorID: ActorID? = null
/** Must be set by PlayerFactory */
diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSwingingDoorOak.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSwingingDoorOak.kt
index f02c43ca6..ec13367d0 100644
--- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSwingingDoorOak.kt
+++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSwingingDoorOak.kt
@@ -28,7 +28,7 @@ class ItemSwingingDoorOak(originalID: ItemID) :
equipPosition = EquipPosition.HAND_GRIP
}
- override val makeFixture: () -> FixtureBase = {
+ @Transient override val makeFixture: () -> FixtureBase = {
FixtureSwingingDoorOak()
}
@@ -53,7 +53,7 @@ class ItemSwingingDoorEbony(originalID: ItemID) :
equipPosition = EquipPosition.HAND_GRIP
}
- override val makeFixture: () -> FixtureBase = {
+ @Transient override val makeFixture: () -> FixtureBase = {
FixtureSwingingDoorEbony()
}
@@ -78,7 +78,7 @@ class ItemSwingingDoorBirch(originalID: ItemID) :
equipPosition = EquipPosition.HAND_GRIP
}
- override val makeFixture: () -> FixtureBase = {
+ @Transient override val makeFixture: () -> FixtureBase = {
FixtureSwingingDoorBirch()
}
@@ -103,7 +103,7 @@ class ItemSwingingDoorRosewood(originalID: ItemID) :
equipPosition = EquipPosition.HAND_GRIP
}
- override val makeFixture: () -> FixtureBase = {
+ @Transient override val makeFixture: () -> FixtureBase = {
FixtureSwingingDoorRosewood()
}
diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt
index ec20ca483..b7110804e 100644
--- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt
+++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt
@@ -30,7 +30,7 @@ class ItemTapestry(originalID: ItemID) : FixtureItemBase(originalID, "net.torval
equipPosition = EquipPosition.HAND_GRIP
}
- override val makeFixture: () -> FixtureBase = {
+ @Transient override val makeFixture: () -> FixtureBase = {
FixtureTapestry(
Gdx.files.internal("assets/monkey_island").readBytes(),
Block.PLANK_NORMAL