From cc909f8116b243902daa71a1a1ccf135133f640c Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 21 May 2021 23:21:49 +0200 Subject: [PATCH] wip block tilling, flatting, stripping --- .../data/mappings/blocks/BlockState.kt | 4 +++ .../data/mappings/blocks/types/Block.kt | 4 +++ .../data/mappings/items/tools/AxeItem.kt | 26 +++++++++++++++---- .../data/mappings/items/tools/HoeItem.kt | 23 ++++++++++++---- .../data/mappings/items/tools/ShovelItem.kt | 24 +++++++++++++---- .../gui/rendering/input/InteractionHandler.kt | 2 +- .../minosoft/mapping/pixlyzer_index.json | 2 +- 7 files changed, 68 insertions(+), 17 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/BlockState.kt b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/BlockState.kt index 00fc0a650..6f3824991 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/BlockState.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/BlockState.kt @@ -229,6 +229,10 @@ data class BlockState( fun withProperties(vararg properties: Pair): BlockState { + return withProperties(properties.toMap()) + } + + fun withProperties(properties: Map): BlockState { val newProperties = this.properties.toMutableMap() for ((key, value) in properties) { newProperties[key] = value diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/Block.kt b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/Block.kt index 1ccdbf881..4ef4dccd7 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/Block.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/types/Block.kt @@ -91,6 +91,10 @@ open class Block( return this.defaultState.withProperties(*properties) } + fun withProperties(properties: Map): BlockState { + return this.defaultState.withProperties(properties) + } + companion object : ResourceLocationDeserializer { override fun deserialize(mappings: Registries?, resourceLocation: ResourceLocation, data: JsonObject): Block { check(mappings != null) { "Registries is null!" } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/AxeItem.kt b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/AxeItem.kt index e8b24c7a4..acf16dc01 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/AxeItem.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/AxeItem.kt @@ -14,21 +14,37 @@ package de.bixilon.minosoft.data.mappings.items.tools import com.google.gson.JsonObject +import de.bixilon.minosoft.data.inventory.ItemStack import de.bixilon.minosoft.data.mappings.ResourceLocation +import de.bixilon.minosoft.data.mappings.blocks.BlockState +import de.bixilon.minosoft.data.mappings.blocks.BlockUsages import de.bixilon.minosoft.data.mappings.blocks.types.Block import de.bixilon.minosoft.data.mappings.versions.Registries +import de.bixilon.minosoft.data.player.Hands +import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit +import de.bixilon.minosoft.protocol.network.connection.PlayConnection +import glm_.vec3.Vec3i open class AxeItem( resourceLocation: ResourceLocation, registries: Registries, data: JsonObject, ) : MiningToolItem(resourceLocation, registries, data) { - val strippableBlocks: List? = data["strippables_blocks"]?.asJsonArray?.let { - val strippableBlocks: MutableList = mutableListOf() - for (id in it) { - strippableBlocks += registries.blockRegistry[id.asInt] + val strippableBlocks: Map? = data["strippables_blocks"]?.asJsonObject?.let { + val items: MutableMap = mutableMapOf() + for ((origin, target) in it.entrySet()) { + items[registries.blockRegistry[origin.toInt()]] = registries.blockRegistry[target.asInt] } - strippableBlocks.toList() + items.toMap() } + override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack): BlockUsages { + // ToDo: Check tags (21w19a+) + + val target = strippableBlocks?.get(blockState.block) ?: return BlockUsages.PASS + + + connection.world[blockPosition] = target.withProperties(blockState.properties) + return BlockUsages.SUCCESS + } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/HoeItem.kt b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/HoeItem.kt index 882a5f9c9..ba059f961 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/HoeItem.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/HoeItem.kt @@ -14,21 +14,34 @@ package de.bixilon.minosoft.data.mappings.items.tools import com.google.gson.JsonObject +import de.bixilon.minosoft.data.inventory.ItemStack import de.bixilon.minosoft.data.mappings.ResourceLocation import de.bixilon.minosoft.data.mappings.blocks.BlockState +import de.bixilon.minosoft.data.mappings.blocks.BlockUsages +import de.bixilon.minosoft.data.mappings.blocks.types.Block import de.bixilon.minosoft.data.mappings.versions.Registries +import de.bixilon.minosoft.data.player.Hands +import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit +import de.bixilon.minosoft.protocol.network.connection.PlayConnection +import glm_.vec3.Vec3i open class HoeItem( resourceLocation: ResourceLocation, registries: Registries, data: JsonObject, ) : MiningToolItem(resourceLocation, registries, data) { - val tillableBlocKStates: List? = data["tillables_block_states"]?.asJsonArray?.let { - val diggableBlocks: MutableList = mutableListOf() - for (id in it) { - diggableBlocks += registries.getBlockState(id.asInt)!! + val tillableBlockStates: Map? = data["tillables_block_states"]?.asJsonObject?.let { + val items: MutableMap = mutableMapOf() + for ((origin, target) in it.entrySet()) { + items[registries.blockRegistry[origin.toInt()]] = registries.getBlockState(target.asInt)!! } - diggableBlocks.toList() + items.toMap() } + override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack): BlockUsages { + // ToDo: Check tags (21w19a+) + + connection.world[blockPosition] = tillableBlockStates?.get(blockState.block) ?: return BlockUsages.PASS + return BlockUsages.SUCCESS + } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/ShovelItem.kt b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/ShovelItem.kt index 0945bd7c9..25e5a2a5e 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/ShovelItem.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/ShovelItem.kt @@ -14,21 +14,35 @@ package de.bixilon.minosoft.data.mappings.items.tools import com.google.gson.JsonObject +import de.bixilon.minosoft.data.inventory.ItemStack import de.bixilon.minosoft.data.mappings.ResourceLocation import de.bixilon.minosoft.data.mappings.blocks.BlockState +import de.bixilon.minosoft.data.mappings.blocks.BlockUsages +import de.bixilon.minosoft.data.mappings.blocks.types.Block import de.bixilon.minosoft.data.mappings.versions.Registries +import de.bixilon.minosoft.data.player.Hands +import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit +import de.bixilon.minosoft.protocol.network.connection.PlayConnection +import glm_.vec3.Vec3i open class ShovelItem( resourceLocation: ResourceLocation, registries: Registries, data: JsonObject, ) : MiningToolItem(resourceLocation, registries, data) { - val flattenableBlockStates: List? = data["flattenables_block_states"]?.asJsonArray?.let { - val flattenableBlockStates: MutableList = mutableListOf() - for (id in it) { - flattenableBlockStates += registries.getBlockState(id.asInt)!! + val flattenableBlockStates: Map? = data["flattenables_block_states"]?.asJsonObject?.let { + val items: MutableMap = mutableMapOf() + for ((origin, target) in it.entrySet()) { + items[registries.blockRegistry[origin.toInt()]] = registries.getBlockState(target.asInt)!! } - flattenableBlockStates.toList() + items.toMap() } + + override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack): BlockUsages { + // ToDo: Check tags (21w19a+) + + connection.world[blockPosition] = flattenableBlockStates?.get(blockState.block) ?: return BlockUsages.PASS + return BlockUsages.SUCCESS + } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/InteractionHandler.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/InteractionHandler.kt index 01b7ca92b..13fa21cd0 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/InteractionHandler.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/InteractionHandler.kt @@ -144,9 +144,9 @@ class InteractionHandler( } - when (itemInHand.item.use(connection, raycastHit.blockState, raycastHit.blockPosition, raycastHit, Hands.MAIN_HAND, itemInHand)) { BlockUsages.SUCCESS -> { + // ToDo: Interact with block? connection.sendPacket(ArmSwingC2SP(Hands.MAIN_HAND)) } BlockUsages.PASS -> { diff --git a/src/main/resources/assets/minosoft/mapping/pixlyzer_index.json b/src/main/resources/assets/minosoft/mapping/pixlyzer_index.json index 8c311f5c1..ea6984d4d 100644 --- a/src/main/resources/assets/minosoft/mapping/pixlyzer_index.json +++ b/src/main/resources/assets/minosoft/mapping/pixlyzer_index.json @@ -1 +1 @@ -{"21w14a":"ea77d7e2d8f756e7387e9d3917903fee45de7c00","21w13a":"35c5fa0f63bdc7ac0375a7b226dc753d2b3067dc","21w11a":"fd8d2dc202764146d6cc2ef39d1b9ee7688bec2c","21w10a":"d809659ea7f63049199e24398d6e0487f074f99e","21w08b":"19ce618be42ff7c6b7f61b7e1617efab551370da","21w08a":"5d30cfd99a2ac5da7f6fe92f57812cf2d0f7e1db","21w07a":"c6610fd2a210dfa7a9dd7f0c5d0961b8780305a2","21w06a":"d9d472fbb271c099b84baa1cd9b94656aba2cbeb","21w05b":"abd8a7bda90c1f30f0c732059d10d28ea3494ff7","21w05a":"4c87ae49f045801c77d65642a539af3fca14948e","21w03a":"f1c94c05f9afdbd71e90d5ab7f7759550b7759ed","1.16.5":"b388213f9912c8bd64e076d4d6fd7eae95727561","20w51a":"9ebbb00b410bd0ea350262dec47b1382f5b36f29","20w49a":"740b6536746dd90c25cce355560001cc805807cc","20w48a":"7cf6a612a8d7faf786b68ee4a912a3c6a16ef08c","20w46a":"2c8349e4e7dca3112e2e346651b16fc299ed89de","20w45a":"54afca6f479cbad563042c8c149d125b7917d509","1.16.2-pre3":"a12d5287fab7738de16a64be945d3094f10feb62","1.16.2-pre2":"7d0213a8868b72125d08832eeaaf3706484da529","1.16.2-pre1":"fe02fc6087f4790c204198813b74a36ce7f2ee1c","20w30a":"0c52afc1aa3ca8c20ea5da0151bd6992e3ed276f","20w29a":"0682465f4e807698c0ddfc9330d1887043d7aeee","20w28a":"9ce5a9f732227dda84ffc7232f579fac2d813046","20w27a":"cbc6bcf5c7128b66f8a3bc771424aa55e86e5cb7","1.16.1":"09f025bd815b94d8f582276f4019df045a3bd435","1.16":"40c08f94e03d1a094ca89bf515114d726bd8bac9","1.16-rc1":"4b0b44cc7cfcc88d827f68569029049f9ebd646f","1.16-pre8":"d36c0128c8e3fa639b258e425541072c0fefbce3","1.16-pre7":"0733ec035af7de42302f14c1b229831a662a69d9","1.16-pre6":"cef6f71759d0ec03603a5221ff76328af37b31c5","1.16-pre5":"183c9ffb81a1f9a21d997bd5a31baebe46c22e7a","1.16-pre4":"fceb8d9b8dbd3ad3259b13329625b83b82060731","1.16-pre3":"73dc1f89a4f245e3bb556bc61bd03c49ec138a57","1.16-pre2":"789476118c53d05a313baba662898f3631ced920","1.16-pre1":"718a5e3b7ad99dab73d202ae8934d7e8fed31adf","20w22a":"d0f02ef8dca5c46cd80259529b1c754e7d58f15f","20w21a":"de6d7d1a2f0b597f92494470c3f6c48c0be61ab9","20w20b":"dba1c32c3e750b34237e6af9602603514243add0","20w20a":"925d97824265dc900a057d178e4b315f42b47b52","20w19a":"c177aeb546be092d2b38f86d9b8a823b803f331d","20w18a":"cbf9e3b24e27e13a2d65224ca18fff148240ed00","20w17a":"5b2f63548a69ba8181703cbcd8464bca5012ffd6","20w16a":"95108738d0855a171af02fb8d2c487c58823712f","20w15a":"cdfa592431d0d7393b88b4d2bed94c1a7c68e402","20w14a":"0ffb470a674dce7403d9548dd9adbf98ab3c2772","20w14infinite":"59131c99e2aaae8f8516256cd6b2bcf2b4f21b05","20w13b":"c34e2246487c251e0b3d7e68bbbd07dab7de6926","20w13a":"256c4663e2ebae3e664d8107d245e52e96cb46b6","20w12a":"fd049756e5306790e07d67c07efbebad247ffe4e","20w11a":"5a0a83c48fef32f8df58432eeb8c4ceedef1793d","20w10a":"0256d650ab6c193964b6c7f355e513b509696f2e","20w09a":"bf08b0aff59bf2ba58c26e4dcf83713956e93253","20w08a":"7916ea583b4fb6d01106db45b50b854224ebcbd3","20w07a":"fb95d8a4a04ce7a6af393783b9a5facf33cab66f","20w06a":"c422b4d5a2c328bc871a03c0460555a684643051","1.16.5-rc1":"1312757ac610cde170824e0d2f9bfe836f46c17b","1.16.4":"c6a254c6d4efe34cb6ef58fecc2e3b3e1406379d","1.16.4-rc1":"9fdedc82fe16e3f1aac903bf8fa17a9209877930","1.16.4-pre2":"228e911f7f63da9e88c19bceafafed95a6dc82f3","1.16.4-pre1":"1b265a34dd4a14e4c5cb4856e30392a3d25c927c","1.16.3":"885a2879c88a70db36b762e0afe6486dd269650a","1.16.3-rc1":"da50b481d36a3c3f4d1690cd26000b9500de9cd4","1.16.2":"f6a149c52f073f738108f4674db63900a8ae1c84","1.16.2-rc2":"4eca6500f6e188837f4fc95d98a672253ff9e1e2","1.16.2-rc1":"7ef3bea391926374c80e29c187054a83cb904de4","1.15.2":"490df20dd28695c7319e9cf9e52114b93b062bfa","1.15.2-pre2":"23b4f40136f9ad669904f6a4c4b821efd30e4475","1.15.2-pre1":"2df679b6a48a2523b60d36f5a7a728c7b981eeb6","1.15.1":"1fd7f715ae94400ba46e399ae3612984e6db2ca7","1.15.1-pre1":"36e6670980fe17c66740429e96932f2959fdc95f","1.15":"a49b4d579a71adeaa9752014703b0bd2315af29a","1.15-pre7":"637c8d94760328cd366580a3586ed1b0a37c5ad9","1.15-pre6":"0332fb040e476cf9f84ac03c00fab68ad0175333","1.15-pre5":"07f997d9d9818c59141bd6c5e79c60f05512bb7b","1.15-pre4":"b0597069bfc210f8563230cfd4ce86c1173a602a","1.15-pre3":"d8eb262f4729682ee934a561d98030f3677858e8","1.15-pre2":"eb3b8d9a039a75a4f7399ab7d278222c750d0053","1.15-pre1":"1484a02cb7e24296cd39bcd55b028214c4cce915","19w46b":"69891c202b0ce368be3ed7a53b0c5090726b773e","19w46a":"99a8e36e643311b3dcb7d9be610d592da4d644aa","19w45b":"a988ba600404b51ae2e39f483264cc00dd78a71a","19w45a":"a111f84e9ff295e294befd221c8df88c1f6e9866","19w44a":"68306c8c062ad03b463fd28e5fe9a86701482935","19w42a":"ee331c7b22c02ce46e36196ed65bb02b297bcdec","19w41a":"408d1391dbbe5bd2ee35bc4d740f1650c7f05dcd","19w40a":"9684079f941dd82f1f82123fcdd4672cc454d7d3","19w39a":"b811604cf6e43519016292bc30f902d372961576","19w38b":"42f756a93f0522a9c893f036c3de078461cf5701","19w38a":"4693891cff2c8d76661a62cf71cd68841643d7b0","19w37a":"8dbbb3548ce39678bf7059961ce2010563a9b680","19w36a":"28d53d8d7da4ca8d5a7b852362283e5e3bc284c1","19w35a":"7719d28931592ab90c70f89a4e3d2d261b092349","19w34a":"a394a85300f6257346583ec8750f952a8dea89a4","1.14.4":"04b02dea85232909aaabaf7e93e7720d27abc7dc","1.14.4-pre7":"210e5284ad1cb1242e90db9648c099fe96276a89","1.14.4-pre6":"0c57ddb54cd544a59b8587b23d027a0752d07916","1.14.4-pre5":"bae283fa6982fcda53e220e2ae53c24f18875043","1.14.4-pre4":"fabc63854536728294d09e56a1beece72fb16771","1.14.4-pre3":"2195ae6a3ad8d6279ca4648c481d480c46c1e9fc","1.14.4-pre2":"d20214fb2ac3e018e1a074063bb0c7c684bdf162","1.14.4-pre1":"81237a0354f97c397331fca74aef8631ce0cca33","1.14.3":"c260bc3009ba42bac5133c175c08d9417e620fb7","1.14.3-pre4":"a79220b67d7758f639945d80d001f8b0135ce65d","1.14.3-pre3":"62ef8dd85c438b04db73e953523c4492ebafbfa1","1.14.3-pre2":"8bedd60b99657e0e5cf83b8e1594788c6055b877","1.14.3-pre1":"bcde219f5c3a8f2d616e6577e07793ffb296bd6b","1.14.2":"58266ec4294c63276c7f628c2f41fef6a10c95cb","1.14.2 Pre-Release 4":"ba4891c3126023af3807d7624a7f069e3247eb0c","1.14.2 Pre-Release 3":"13dd1a14b589abb6eeb1a58b1c208109dae1600f","1.14.2 Pre-Release 2":"54f04ec460dfbdb0b543b6afab4a29c76702261f","1.14.2 Pre-Release 1":"71354888138db50749a2fdb4512c3055daf3f858","1.14.1":"6eb3209ee41c3a3fab6a3834e150972b39992a5f","1.14.1 Pre-Release 2":"f621a5bc8d428b5b9140c9a6ab54ca6ca6772389","1.14.1 Pre-Release 1":"bba13cecb85753c66c38e477f6fd47b43e9b5194","1.14":"6ced213dab0f59fc8629d8c5e658373eb9cf5d0c","1.14 Pre-Release 5":"5317a95d449a6258993e652f2602436cee4d3796","1.14 Pre-Release 4":"8dfcb0d985e4fd7162655c8e0eb7731032ac2bf3","1.14 Pre-Release 3":"fea442b33b2f4815272824905f65611477464c5e","1.14 Pre-Release 2":"1953e5b3944c1a8cea3618abbca0c7879398a0cd","1.14 Pre-Release 1":"488264eba3556b8549c0241fc19bc986c864f34f","19w14b":"cce33de8de23a089d3d7d07426ba14cf843cca05","19w14a":"e16b97684c811097a074012f7f22f154adb78f46","3D Shareware v1.34":"9871622b5cf87e2b658a2a4bd0ae403ab663fddc","19w13b":"de7b1e6ebda633d813fd6c7e0a54f409b95fd0c9","19w13a":"c9c8d67c181bfb9eb26a78f11237780c3eaf410e","19w12b":"ca8b33890db962d9b1806ab427aeff7e30e32305","19w12a":"7df41ec7abb67a86a9fbf3fb1aceb20d3a4fae39","19w11b":"054bc37ae4daa7d1361aaf77e321f2044678cc1b","19w11a":"cafef567ac2bcdbf2f2df48cd7e624f224ab10dc","21w15a":"061664284e6c10e117d432e10f5ba9edd704fd72","17w46a":"153dff89ed90f91758f847907cd4d48d3b553a3f","21w16a":"cb0f3ca6acbb1ccf96221fb55f18221ca4e22d6c","21w17a":"5a2ddb1e48337cb294d87b2e928e6420af40bada","21w18a":"760568746540eea28e21abb2611fc6a7aafe1e2d","21w19a":"88dd68eafe31c006a896a969ee1fa1bb62470a34","21w20a":"cebe4a1e0f92a9e0e1f2a4809675ca42569b8905"} +{"21w14a":"ea77d7e2d8f756e7387e9d3917903fee45de7c00","21w13a":"35c5fa0f63bdc7ac0375a7b226dc753d2b3067dc","21w11a":"fd8d2dc202764146d6cc2ef39d1b9ee7688bec2c","21w10a":"d809659ea7f63049199e24398d6e0487f074f99e","21w08b":"19ce618be42ff7c6b7f61b7e1617efab551370da","21w08a":"5d30cfd99a2ac5da7f6fe92f57812cf2d0f7e1db","21w07a":"c6610fd2a210dfa7a9dd7f0c5d0961b8780305a2","21w06a":"d9d472fbb271c099b84baa1cd9b94656aba2cbeb","21w05b":"abd8a7bda90c1f30f0c732059d10d28ea3494ff7","21w05a":"4c87ae49f045801c77d65642a539af3fca14948e","21w03a":"f1c94c05f9afdbd71e90d5ab7f7759550b7759ed","1.16.5":"70fe6958afa4950442034b42469fdf94bb27441f","20w51a":"9ebbb00b410bd0ea350262dec47b1382f5b36f29","20w49a":"740b6536746dd90c25cce355560001cc805807cc","20w48a":"7cf6a612a8d7faf786b68ee4a912a3c6a16ef08c","20w46a":"2c8349e4e7dca3112e2e346651b16fc299ed89de","20w45a":"54afca6f479cbad563042c8c149d125b7917d509","1.16.2-pre3":"a12d5287fab7738de16a64be945d3094f10feb62","1.16.2-pre2":"7d0213a8868b72125d08832eeaaf3706484da529","1.16.2-pre1":"fe02fc6087f4790c204198813b74a36ce7f2ee1c","20w30a":"0c52afc1aa3ca8c20ea5da0151bd6992e3ed276f","20w29a":"0682465f4e807698c0ddfc9330d1887043d7aeee","20w28a":"9ce5a9f732227dda84ffc7232f579fac2d813046","20w27a":"cbc6bcf5c7128b66f8a3bc771424aa55e86e5cb7","1.16.1":"09f025bd815b94d8f582276f4019df045a3bd435","1.16":"40c08f94e03d1a094ca89bf515114d726bd8bac9","1.16-rc1":"4b0b44cc7cfcc88d827f68569029049f9ebd646f","1.16-pre8":"d36c0128c8e3fa639b258e425541072c0fefbce3","1.16-pre7":"0733ec035af7de42302f14c1b229831a662a69d9","1.16-pre6":"cef6f71759d0ec03603a5221ff76328af37b31c5","1.16-pre5":"183c9ffb81a1f9a21d997bd5a31baebe46c22e7a","1.16-pre4":"fceb8d9b8dbd3ad3259b13329625b83b82060731","1.16-pre3":"73dc1f89a4f245e3bb556bc61bd03c49ec138a57","1.16-pre2":"789476118c53d05a313baba662898f3631ced920","1.16-pre1":"718a5e3b7ad99dab73d202ae8934d7e8fed31adf","20w22a":"d0f02ef8dca5c46cd80259529b1c754e7d58f15f","20w21a":"de6d7d1a2f0b597f92494470c3f6c48c0be61ab9","20w20b":"dba1c32c3e750b34237e6af9602603514243add0","20w20a":"925d97824265dc900a057d178e4b315f42b47b52","20w19a":"c177aeb546be092d2b38f86d9b8a823b803f331d","20w18a":"cbf9e3b24e27e13a2d65224ca18fff148240ed00","20w17a":"5b2f63548a69ba8181703cbcd8464bca5012ffd6","20w16a":"95108738d0855a171af02fb8d2c487c58823712f","20w15a":"cdfa592431d0d7393b88b4d2bed94c1a7c68e402","20w14a":"0ffb470a674dce7403d9548dd9adbf98ab3c2772","20w14infinite":"59131c99e2aaae8f8516256cd6b2bcf2b4f21b05","20w13b":"c34e2246487c251e0b3d7e68bbbd07dab7de6926","20w13a":"256c4663e2ebae3e664d8107d245e52e96cb46b6","20w12a":"fd049756e5306790e07d67c07efbebad247ffe4e","20w11a":"5a0a83c48fef32f8df58432eeb8c4ceedef1793d","20w10a":"0256d650ab6c193964b6c7f355e513b509696f2e","20w09a":"bf08b0aff59bf2ba58c26e4dcf83713956e93253","20w08a":"7916ea583b4fb6d01106db45b50b854224ebcbd3","20w07a":"fb95d8a4a04ce7a6af393783b9a5facf33cab66f","20w06a":"c422b4d5a2c328bc871a03c0460555a684643051","1.16.5-rc1":"1312757ac610cde170824e0d2f9bfe836f46c17b","1.16.4":"c6a254c6d4efe34cb6ef58fecc2e3b3e1406379d","1.16.4-rc1":"9fdedc82fe16e3f1aac903bf8fa17a9209877930","1.16.4-pre2":"228e911f7f63da9e88c19bceafafed95a6dc82f3","1.16.4-pre1":"1b265a34dd4a14e4c5cb4856e30392a3d25c927c","1.16.3":"885a2879c88a70db36b762e0afe6486dd269650a","1.16.3-rc1":"da50b481d36a3c3f4d1690cd26000b9500de9cd4","1.16.2":"f6a149c52f073f738108f4674db63900a8ae1c84","1.16.2-rc2":"4eca6500f6e188837f4fc95d98a672253ff9e1e2","1.16.2-rc1":"7ef3bea391926374c80e29c187054a83cb904de4","1.15.2":"06d58a4391b0cb71180e6d696d71514e952e90e8","1.15.2-pre2":"23b4f40136f9ad669904f6a4c4b821efd30e4475","1.15.2-pre1":"2df679b6a48a2523b60d36f5a7a728c7b981eeb6","1.15.1":"1fd7f715ae94400ba46e399ae3612984e6db2ca7","1.15.1-pre1":"36e6670980fe17c66740429e96932f2959fdc95f","1.15":"a49b4d579a71adeaa9752014703b0bd2315af29a","1.15-pre7":"637c8d94760328cd366580a3586ed1b0a37c5ad9","1.15-pre6":"0332fb040e476cf9f84ac03c00fab68ad0175333","1.15-pre5":"07f997d9d9818c59141bd6c5e79c60f05512bb7b","1.15-pre4":"b0597069bfc210f8563230cfd4ce86c1173a602a","1.15-pre3":"d8eb262f4729682ee934a561d98030f3677858e8","1.15-pre2":"eb3b8d9a039a75a4f7399ab7d278222c750d0053","1.15-pre1":"1484a02cb7e24296cd39bcd55b028214c4cce915","19w46b":"69891c202b0ce368be3ed7a53b0c5090726b773e","19w46a":"99a8e36e643311b3dcb7d9be610d592da4d644aa","19w45b":"a988ba600404b51ae2e39f483264cc00dd78a71a","19w45a":"a111f84e9ff295e294befd221c8df88c1f6e9866","19w44a":"68306c8c062ad03b463fd28e5fe9a86701482935","19w42a":"ee331c7b22c02ce46e36196ed65bb02b297bcdec","19w41a":"408d1391dbbe5bd2ee35bc4d740f1650c7f05dcd","19w40a":"9684079f941dd82f1f82123fcdd4672cc454d7d3","19w39a":"b811604cf6e43519016292bc30f902d372961576","19w38b":"42f756a93f0522a9c893f036c3de078461cf5701","19w38a":"4693891cff2c8d76661a62cf71cd68841643d7b0","19w37a":"8dbbb3548ce39678bf7059961ce2010563a9b680","19w36a":"28d53d8d7da4ca8d5a7b852362283e5e3bc284c1","19w35a":"7719d28931592ab90c70f89a4e3d2d261b092349","19w34a":"a394a85300f6257346583ec8750f952a8dea89a4","1.14.4":"7ef6e68f70fae75fb90141583a5e51ba7b01d2a6","1.14.4-pre7":"210e5284ad1cb1242e90db9648c099fe96276a89","1.14.4-pre6":"0c57ddb54cd544a59b8587b23d027a0752d07916","1.14.4-pre5":"bae283fa6982fcda53e220e2ae53c24f18875043","1.14.4-pre4":"fabc63854536728294d09e56a1beece72fb16771","1.14.4-pre3":"2195ae6a3ad8d6279ca4648c481d480c46c1e9fc","1.14.4-pre2":"d20214fb2ac3e018e1a074063bb0c7c684bdf162","1.14.4-pre1":"81237a0354f97c397331fca74aef8631ce0cca33","1.14.3":"c260bc3009ba42bac5133c175c08d9417e620fb7","1.14.3-pre4":"a79220b67d7758f639945d80d001f8b0135ce65d","1.14.3-pre3":"62ef8dd85c438b04db73e953523c4492ebafbfa1","1.14.3-pre2":"8bedd60b99657e0e5cf83b8e1594788c6055b877","1.14.3-pre1":"bcde219f5c3a8f2d616e6577e07793ffb296bd6b","1.14.2":"58266ec4294c63276c7f628c2f41fef6a10c95cb","1.14.2 Pre-Release 4":"ba4891c3126023af3807d7624a7f069e3247eb0c","1.14.2 Pre-Release 3":"13dd1a14b589abb6eeb1a58b1c208109dae1600f","1.14.2 Pre-Release 2":"54f04ec460dfbdb0b543b6afab4a29c76702261f","1.14.2 Pre-Release 1":"71354888138db50749a2fdb4512c3055daf3f858","1.14.1":"6eb3209ee41c3a3fab6a3834e150972b39992a5f","1.14.1 Pre-Release 2":"f621a5bc8d428b5b9140c9a6ab54ca6ca6772389","1.14.1 Pre-Release 1":"bba13cecb85753c66c38e477f6fd47b43e9b5194","1.14":"6ced213dab0f59fc8629d8c5e658373eb9cf5d0c","1.14 Pre-Release 5":"5317a95d449a6258993e652f2602436cee4d3796","1.14 Pre-Release 4":"8dfcb0d985e4fd7162655c8e0eb7731032ac2bf3","1.14 Pre-Release 3":"fea442b33b2f4815272824905f65611477464c5e","1.14 Pre-Release 2":"1953e5b3944c1a8cea3618abbca0c7879398a0cd","1.14 Pre-Release 1":"488264eba3556b8549c0241fc19bc986c864f34f","19w14b":"cce33de8de23a089d3d7d07426ba14cf843cca05","19w14a":"e16b97684c811097a074012f7f22f154adb78f46","3D Shareware v1.34":"9871622b5cf87e2b658a2a4bd0ae403ab663fddc","19w13b":"de7b1e6ebda633d813fd6c7e0a54f409b95fd0c9","19w13a":"c9c8d67c181bfb9eb26a78f11237780c3eaf410e","19w12b":"ca8b33890db962d9b1806ab427aeff7e30e32305","19w12a":"7df41ec7abb67a86a9fbf3fb1aceb20d3a4fae39","19w11b":"054bc37ae4daa7d1361aaf77e321f2044678cc1b","19w11a":"cafef567ac2bcdbf2f2df48cd7e624f224ab10dc","21w15a":"061664284e6c10e117d432e10f5ba9edd704fd72","17w46a":"153dff89ed90f91758f847907cd4d48d3b553a3f","21w16a":"cb0f3ca6acbb1ccf96221fb55f18221ca4e22d6c","21w17a":"5a2ddb1e48337cb294d87b2e928e6420af40bada","21w18a":"760568746540eea28e21abb2611fc6a7aafe1e2d","21w19a":"88dd68eafe31c006a896a969ee1fa1bb62470a34","21w20a":"1c904b0387c072b0efbf31d0d8c8df3507479fc0"}