From e4d6e9fe13465ddac4c4d8655de0d130b5587859 Mon Sep 17 00:00:00 2001 From: zeruth Date: Sat, 8 Jun 2019 05:43:03 -0400 Subject: [PATCH] Port Injector to main layout Adds deobfuscator Adds injected-client Adds injector-plugin Adds runescape-client Replaces RL's apis Small bug with sprites atm, will be resolved soon. tired af. Builds, probably --- .../cache/item/ItemSpriteFactory.java | 44 +- .../net/runelite/cache/item/SpritePixels.java | 6 +- deobfuscator/pom.xml | 174 + .../main/java/net/runelite/asm/ClassFile.java | 420 + .../java/net/runelite/asm/ClassGroup.java | 110 + .../src/main/java/net/runelite/asm/Field.java | 163 + .../java/net/runelite/asm/Interfaces.java | 92 + .../main/java/net/runelite/asm/Method.java | 314 + .../src/main/java/net/runelite/asm/Type.java | 228 + .../runelite/asm/attributes/Annotations.java | 85 + .../net/runelite/asm/attributes/Code.java | 113 + .../runelite/asm/attributes/Exceptions.java | 59 +- .../asm/attributes/annotation/Annotation.java | 82 + .../asm/attributes/annotation/Element.java | 64 +- .../asm/attributes/code/Exception.java | 111 + .../asm/attributes/code/Exceptions.java | 73 + .../asm/attributes/code/Instruction.java | 144 + .../asm/attributes/code/InstructionType.java | 350 + .../asm/attributes/code/Instructions.java | 189 + .../runelite/asm/attributes/code/Label.java | 128 + .../asm/attributes/code/LocalVariable.java | 63 +- .../asm/attributes/code/Parameter.java | 43 +- .../types/AdditionInstruction.java | 121 + .../code/instruction/types/ArrayLoad.java | 84 + .../types/ArrayStoreInstruction.java | 31 + .../types/ComparisonInstruction.java | 6 +- .../types/ConversionInstruction.java | 31 + .../types/DivisionInstruction.java | 86 + .../instruction/types/DupInstruction.java | 50 +- .../instruction/types/FieldInstruction.java | 14 +- .../types/GetFieldInstruction.java | 30 + .../instruction/types/IntInstruction.java | 11 +- .../instruction/types/InvokeInstruction.java | 39 + .../instruction/types/JumpingInstruction.java | 18 +- .../instruction/types/LVTInstruction.java | 16 +- .../instruction/types/LVTInstructionType.java | 29 +- .../types/MappableInstruction.java | 38 + .../types/PushConstantInstruction.java | 34 + .../instruction/types/ReturnInstruction.java | 31 + .../types/SetFieldInstruction.java | 30 + .../types/SubtractionInstruction.java | 136 + .../instruction/types/TypeInstruction.java | 34 + .../attributes/code/instructions/AALoad.java | 75 + .../attributes/code/instructions/AAStore.java | 59 + .../code/instructions/AConstNull.java | 63 + .../attributes/code/instructions/ALoad.java | 104 + .../code/instructions/ANewArray.java | 103 + .../attributes/code/instructions/AStore.java | 102 + .../attributes/code/instructions/AThrow.java | 63 + .../code/instructions/ArrayLength.java | 62 + .../code/instructions/ArrayStore.java | 140 + .../attributes/code/instructions/BALoad.java | 63 + .../attributes/code/instructions/BAStore.java | 58 + .../attributes/code/instructions/BiPush.java | 106 + .../attributes/code/instructions/CALoad.java | 63 + .../attributes/code/instructions/CAStore.java | 58 + .../code/instructions/CheckCast.java | 110 + .../asm/attributes/code/instructions/D2F.java | 63 + .../asm/attributes/code/instructions/D2I.java | 63 + .../asm/attributes/code/instructions/D2L.java | 63 + .../attributes/code/instructions/DALoad.java | 63 + .../attributes/code/instructions/DAStore.java | 58 + .../attributes/code/instructions/DAdd.java | 73 + .../attributes/code/instructions/DCmpG.java | 77 + .../attributes/code/instructions/DCmpL.java | 77 + .../attributes/code/instructions/DDiv.java | 74 + .../attributes/code/instructions/DLoad.java | 107 + .../attributes/code/instructions/DMul.java | 72 + .../attributes/code/instructions/DNeg.java | 69 + .../attributes/code/instructions/DRem.java | 73 + .../attributes/code/instructions/DStore.java | 102 + .../attributes/code/instructions/DSub.java | 73 + .../asm/attributes/code/instructions/Dup.java | 127 + .../attributes/code/instructions/Dup2.java | 142 + .../attributes/code/instructions/Dup2_X1.java | 262 + .../attributes/code/instructions/Dup2_X2.java | 138 + .../attributes/code/instructions/Dup_X1.java | 152 + .../attributes/code/instructions/Dup_X2.java | 155 + .../asm/attributes/code/instructions/F2D.java | 62 + .../asm/attributes/code/instructions/F2I.java | 62 + .../asm/attributes/code/instructions/F2L.java | 62 + .../attributes/code/instructions/FALoad.java | 63 + .../attributes/code/instructions/FAStore.java | 58 + .../attributes/code/instructions/FAdd.java | 73 + .../attributes/code/instructions/FCmpG.java | 77 + .../attributes/code/instructions/FCmpL.java | 77 + .../attributes/code/instructions/FDiv.java | 74 + .../attributes/code/instructions/FLoad.java | 107 + .../attributes/code/instructions/FMul.java | 72 + .../attributes/code/instructions/FNeg.java | 69 + .../attributes/code/instructions/FRem.java | 73 + .../attributes/code/instructions/FStore.java | 102 + .../attributes/code/instructions/FSub.java | 73 + .../code/instructions/GetField.java | 145 + .../code/instructions/GetStatic.java | 139 + .../attributes/code/instructions/Goto.java | 124 + .../attributes/code/instructions/GotoW.java | 88 +- .../asm/attributes/code/instructions/I2B.java | 62 + .../asm/attributes/code/instructions/I2C.java | 62 + .../asm/attributes/code/instructions/I2D.java | 62 + .../asm/attributes/code/instructions/I2F.java | 62 + .../asm/attributes/code/instructions/I2L.java | 67 + .../asm/attributes/code/instructions/I2S.java | 62 + .../attributes/code/instructions/IALoad.java | 63 + .../attributes/code/instructions/IAStore.java | 58 + .../attributes/code/instructions/IAdd.java | 78 + .../attributes/code/instructions/IAnd.java | 78 + .../code/instructions/IConstZero.java | 63 + .../attributes/code/instructions/IDiv.java | 79 + .../attributes/code/instructions/IInc.java | 110 + .../attributes/code/instructions/ILoad.java | 113 + .../attributes/code/instructions/IMul.java | 77 + .../attributes/code/instructions/INeg.java | 69 + .../asm/attributes/code/instructions/IOr.java | 72 + .../attributes/code/instructions/IRem.java | 73 + .../attributes/code/instructions/IShL.java | 72 + .../attributes/code/instructions/IShR.java | 72 + .../attributes/code/instructions/IStore.java | 102 + .../attributes/code/instructions/ISub.java | 73 + .../attributes/code/instructions/IUShR.java | 72 + .../attributes/code/instructions/IXor.java | 72 + .../asm/attributes/code/instructions/If.java | 341 + .../asm/attributes/code/instructions/If0.java | 230 + .../code/instructions/IfACmpEq.java | 90 + .../code/instructions/IfACmpNe.java | 90 + .../attributes/code/instructions/IfCmpGe.java | 69 + .../attributes/code/instructions/IfCmpGt.java | 69 + .../attributes/code/instructions/IfCmpLe.java | 69 + .../attributes/code/instructions/IfCmpLt.java | 69 + .../attributes/code/instructions/IfEq.java | 110 + .../attributes/code/instructions/IfGe.java | 69 + .../attributes/code/instructions/IfGt.java | 69 + .../code/instructions/IfICmpEq.java | 135 + .../code/instructions/IfICmpNe.java | 143 + .../attributes/code/instructions/IfLe.java | 69 + .../attributes/code/instructions/IfLt.java | 69 + .../attributes/code/instructions/IfNe.java | 117 + .../code/instructions/IfNonNull.java | 84 + .../attributes/code/instructions/IfNull.java | 84 + .../code/instructions/InstanceOf.java | 102 + .../code/instructions/InvokeDynamic.java | 114 + .../code/instructions/InvokeInterface.java | 331 + .../code/instructions/InvokeSpecial.java | 296 + .../code/instructions/InvokeStatic.java | 293 + .../code/instructions/InvokeVirtual.java | 414 + .../asm/attributes/code/instructions/L2D.java | 62 + .../asm/attributes/code/instructions/L2F.java | 62 + .../asm/attributes/code/instructions/L2I.java | 62 + .../attributes/code/instructions/LALoad.java | 63 + .../attributes/code/instructions/LAStore.java | 58 + .../attributes/code/instructions/LAdd.java | 73 + .../attributes/code/instructions/LAnd.java | 72 + .../attributes/code/instructions/LCmp.java | 176 + .../asm/attributes/code/instructions/LDC.java | 184 + .../attributes/code/instructions/LDiv.java | 74 + .../attributes/code/instructions/LLoad.java | 107 + .../attributes/code/instructions/LMul.java | 78 + .../attributes/code/instructions/LNeg.java | 69 + .../asm/attributes/code/instructions/LOr.java | 72 + .../attributes/code/instructions/LRem.java | 73 + .../attributes/code/instructions/LShL.java | 72 + .../attributes/code/instructions/LShR.java | 72 + .../attributes/code/instructions/LStore.java | 104 + .../attributes/code/instructions/LSub.java | 73 + .../attributes/code/instructions/LUShR.java | 72 + .../attributes/code/instructions/LXor.java | 72 + .../code/instructions/LookupSwitch.java | 153 + .../code/instructions/MonitorEnter.java | 54 + .../code/instructions/MonitorExit.java | 54 + .../code/instructions/MultiANewArray.java | 115 + .../asm/attributes/code/instructions/NOP.java | 56 + .../asm/attributes/code/instructions/New.java | 115 + .../code/instructions/NewArray.java | 120 + .../asm/attributes/code/instructions/Pop.java | 58 + .../attributes/code/instructions/Pop2.java | 66 + .../code/instructions/PutField.java | 275 + .../code/instructions/PutStatic.java | 200 + .../attributes/code/instructions/Return.java | 109 + .../attributes/code/instructions/SALoad.java | 63 + .../attributes/code/instructions/SAStore.java | 58 + .../attributes/code/instructions/SiPush.java | 106 + .../attributes/code/instructions/Swap.java | 89 + .../code/instructions/TableSwitch.java | 210 + .../attributes/code/instructions/VReturn.java | 63 + .../net/runelite/asm/execution/Execution.java | 345 + .../asm/execution/ExecutionVisitor.java | 31 + .../net/runelite/asm/execution/Frame.java | 432 + .../runelite/asm/execution/FrameVisitor.java | 6 +- .../asm/execution/InstructionContext.java | 260 + .../runelite/asm/execution/MethodContext.java | 83 + .../asm/execution/MethodContextVisitor.java | 31 + .../execution/ParallellMappingExecutor.java | 254 + .../net/runelite/asm/execution/Stack.java | 93 + .../runelite/asm/execution/StackContext.java | 100 + .../runelite/asm/execution/StaticStep.java | 209 + .../net/runelite/asm/execution/Value.java | 164 + .../asm/execution/VariableContext.java | 112 + .../net/runelite/asm/execution/Variables.java | 38 +- .../asm/execution/WeakInstructionContext.java | 83 + .../objectwebasm/NonloadingClassWriter.java | 99 +- .../java/net/runelite/asm/pool/Class.java | 68 +- .../java/net/runelite/asm/pool/Field.java | 96 +- .../java/net/runelite/asm/pool/Method.java | 104 + .../net/runelite/asm/signature/Signature.java | 177 + .../asm/signature/util/VirtualMethods.java | 97 + .../asm/visitors/ClassAnnotationVisitor.java | 68 + .../asm/visitors/ClassFieldVisitor.java | 83 +- .../asm/visitors/ClassFileVisitor.java | 87 + .../runelite/asm/visitors/CodeVisitor.java | 449 + .../asm/visitors/FieldAnnotationVisitor.java | 68 + .../asm/visitors/MethodAnnotationVisitor.java | 68 + .../src/main/java/net/runelite/deob/Deob.java | 225 + .../net/runelite/deob/DeobAnnotations.java | 144 + .../net/runelite/deob/DeobProperties.java | 29 +- .../java/net/runelite/deob/Deobfuscator.java | 33 + .../java/net/runelite/deob/Transformer.java | 33 + .../runelite/deob/c2s/IsaacCipherFinder.java | 121 + .../net/runelite/deob/c2s/RWOpcodeFinder.java | 116 + .../deob/clientver/ClientVersion.java | 67 + .../deob/clientver/ClientVersionMain.java | 39 + .../deob/clientver/VersionClassVisitor.java | 50 +- .../deob/clientver/VersionMethodVisitor.java | 49 +- .../runelite/deob/deobfuscators/CastNull.java | 93 + .../deob/deobfuscators/EnumDeobfuscator.java | 262 + .../deob/deobfuscators/FieldInliner.java | 178 + .../deobfuscators/IllegalStateExceptions.java | 165 + .../net/runelite/deob/deobfuscators/Lvt.java | 99 + .../runelite/deob/deobfuscators/Order.java | 206 + .../deobfuscators/PacketHandlerOrder.java | 693 + .../deob/deobfuscators/RenameUnique.java | 109 + .../runelite/deob/deobfuscators/Renamer.java | 339 + .../deob/deobfuscators/RuntimeExceptions.java | 81 + .../deob/deobfuscators/UnreachedCode.java | 113 + .../deob/deobfuscators/UnusedClass.java | 77 + .../deob/deobfuscators/UnusedFields.java | 85 + .../deob/deobfuscators/UnusedMethods.java | 119 + .../deob/deobfuscators/UnusedParameters.java | 316 + .../arithmetic/AssociatedConstant.java | 35 + .../deob/deobfuscators/arithmetic/DMath.java | 147 + .../arithmetic/DupDeobfuscator.java | 275 + .../deobfuscators/arithmetic/Encryption.java | 57 + .../deobfuscators/arithmetic/FieldInfo.java | 165 + .../deobfuscators/arithmetic/ModArith.java | 795 + .../MultiplicationDeobfuscator.java | 401 + .../arithmetic/MultiplicationExpression.java | 134 + .../arithmetic/MultiplyOneDeobfuscator.java | 129 + .../arithmetic/MultiplyZeroDeobfuscator.java | 142 + .../deob/deobfuscators/arithmetic/Pair.java | 56 + .../deob/deobfuscators/cfg/Block.java | 164 + .../cfg/ControlFlowDeobfuscator.java | 267 + .../deobfuscators/cfg/ControlFlowGraph.java | 160 + .../constparam/ConstantMethodParameter.java | 74 + .../constparam/ConstantParameter.java | 483 + .../exprargorder/ExprArgOrder.java | 544 + .../exprargorder/Expression.java | 100 + .../deob/deobfuscators/lvt/LVTType.java | 10 +- .../deob/deobfuscators/lvt/MapKey.java | 74 +- .../deob/deobfuscators/lvt/Mappings.java | 92 + .../mapping/AnnotationIntegrityChecker.java | 356 + .../mapping/AnnotationMapper.java | 161 + .../mapping/ClassGroupMapper.java | 85 +- .../deobfuscators/mapping/ClassMapper.java | 85 + .../mapping/ConstructorMapper.java | 131 + .../mapping/ExecutionMapper.java | 56 +- .../deob/deobfuscators/mapping/Mapper.java | 239 + .../deob/deobfuscators/mapping/Mapping.java | 99 + .../mapping/MappingExecutorUtil.java | 311 + .../mapping/MethodSignatureMapper.java | 72 + .../mapping/ParallelExecutorMapping.java | 420 + .../mapping/StaticInitializerIndexer.java | 92 + .../mapping/StaticMethodSignatureMapper.java | 87 + .../deobfuscators/menuaction/Comparison.java | 88 +- .../menuaction/MenuActionDeobfuscator.java | 257 + .../packethandler/PacketLengthFinder.java | 155 + .../packethandler/PacketRead.java | 114 + .../packethandler/PacketTypeFinder.java | 115 + .../packetwrite/OpcodeReplacer.java | 99 + .../packetwrite/PacketWrite.java | 51 +- .../packetwrite/PacketWriteDeobfuscator.java | 337 + .../transformers/ClientErrorTransformer.java | 105 + .../transformers/GetPathTransformer.java | 98 + .../transformers/MaxMemoryTransformer.java | 115 + .../transformers/OpcodesTransformer.java | 74 + .../transformers/ReflectionTransformer.java | 254 + .../RuneliteBufferTransformer.java | 217 + .../transformers/buffer/BufferFinder.java | 115 + .../buffer/BufferMethodInjector.java | 140 + .../buffer/BufferPayloadFinder.java | 73 + .../buffer/PacketFlushFinder.java | 119 + .../transformers/buffer/RuneliteBuffer.java | 198 + .../net/runelite/deob/s2c/HandlerFinder.java | 309 + .../net/runelite/deob/s2c/PacketHandler.java | 176 + .../net/runelite/deob/s2c/PacketHandlers.java | 70 + .../deob/updater/AnnotationCopier.java | 120 + .../deob/updater/AnnotationRenamer.java | 92 + .../deob/updater/ParameterRenamer.java | 41 +- .../runelite/deob/updater/UpdateMappings.java | 96 + .../java/net/runelite/deob/util/IdGen.java | 36 + .../java/net/runelite/deob/util/JarUtil.java | 127 + .../net/runelite/deob/util/NameMappings.java | 74 + .../runelite/deob/util/PrimitiveUtils.java | 73 + extended-mixin-processor/.gitignore | 1 - extended-mixin-processor/pom.xml | 231 - .../mixinprocessor/MethodGarbageValue.java | 65 - .../mixinprocessor/MixinProcessorMojo.java | 274 - .../mixinprocessor/annotations/Append.java | 34 - .../mixinprocessor/annotations/Inject.java | 34 - .../mixinprocessor/annotations/Overwrite.java | 34 - .../mixinprocessor/annotations/Prepend.java | 34 - .../mixinprocessor/annotations/Provided.java | 34 - .../annotations/Reobfuscate.java | 34 - .../mixinprocessor/enums/InjectionType.java | 35 - .../generators/AnnotationProcessor.java | 62 - .../generators/PatchGenerator.java | 64 - .../generators/StaticGenerator.java | 104 - .../generators/StaticStageTwoGenerator.java | 260 - .../parsers/FieldAnnotationParser.java | 110 - .../parsers/GamepackDownloader.java | 91 - .../mixinprocessor/parsers/HooksParser.java | 144 - .../parsers/MethodAnnotationParser.java | 127 - .../parsers/MethodReflector.java | 329 - .../AnnotationRemoverTransformer.java | 103 - .../transformers/AsmBaseTransformer.java | 45 - .../AsmMethodGarbageTransformer.java | 107 - .../AsmMethodSignatureTransformer.java | 107 - .../transformers/AsmNameTransformer.java | 175 - .../AsmStaticUsageTransformer.java | 114 - .../transformers/DoNothingTransformer.java | 56 - .../GetFieldDecoderTransformer.java | 196 - .../ProvidedRemoverTransformer.java | 101 - .../mixinprocessor/util/JavassistUtils.java | 44 - .../mixinprocessor/util/RefUtils.java | 339 - .../mixinprocessor/util/WebUtils.java | 71 - .../resources/mixin-processor-license.txt | 22 - extended-mixins/gamepack.deob.jar.op.json | 887 - extended-mixins/hooks.json | 32344 ---------------- extended-mixins/pom.xml | 111 - .../mixinprocessor/annotations/Append.java | 34 - .../mixinprocessor/annotations/Inject.java | 34 - .../mixinprocessor/annotations/Overwrite.java | 34 - .../mixinprocessor/annotations/Prepend.java | 34 - .../mixinprocessor/annotations/Provided.java | 34 - .../annotations/Reobfuscate.java | 34 - .../main/java/us/runelitepl/mixins/Actor.java | 63 - .../java/us/runelitepl/mixins/Client.java | 542 - .../us/runelitepl/mixins/MouseRecorder.java | 76 - .../java/us/runelitepl/mixins/Player.java | 81 - .../java/us/runelitepl/mixins/Projectile.java | 81 - .../main/java/us/runelitepl/mixins/Scene.java | 104 - .../java/us/runelitepl/mixins/_Statics_.java | 64 - .../resources/extended-mixins-license.txt | 22 - injected-client/pom.xml | 94 + injector-plugin/pom.xml | 109 + .../java/net/runelite/injector/Inject.java | 626 + .../runelite/injector/InjectConstruct.java | 171 + .../net/runelite/injector/InjectGetter.java | 155 + .../net/runelite/injector/InjectHook.java | 384 + .../runelite/injector/InjectHookMethod.java | 251 + .../net/runelite/injector/InjectInvoker.java | 291 + .../net/runelite/injector/InjectMojo.java | 155 + .../net/runelite/injector/InjectSetter.java | 159 + .../runelite/injector/InjectionException.java | 25 +- .../java/net/runelite/injector/Injector.java | 76 + .../runelite/injector/InjectorValidator.java | 196 + .../net/runelite/injector/MixinInjector.java | 982 + .../injector/raw/ClearColorBuffer.java | 93 + .../injector/raw/DrawAfterWidgets.java | 287 + .../runelite/injector/raw/RasterizerHook.java | 400 + .../net/runelite/injector/raw/RenderDraw.java | 92 + .../net/runelite/injector/raw/ScriptVM.java | 353 + pom.xml | 6 +- .../src/main/java/net/runelite/api/Actor.java | 24 +- .../java/net/runelite/api/AnimationID.java | 2 +- .../main/java/net/runelite/api/Client.java | 115 +- .../java/net/runelite/api/CollisionData.java | 2 +- .../net/runelite/api/DecorativeObject.java | 2 +- ...umComposition.java => EnumDefinition.java} | 2 +- .../runelite/api/EquipmentInventorySlot.java | 2 +- .../java/net/runelite/api/GameObject.java | 4 +- .../api/{GameEngine.java => GameShell.java} | 5 +- .../main/java/net/runelite/api/GameState.java | 4 - .../net/runelite/api/GrandExchangeOffer.java | 24 - .../runelite/api/GrandExchangeOfferState.java | 25 - .../main/java/net/runelite/api/GraphicID.java | 1 - .../main/java/net/runelite/api/HashTable.java | 24 - .../main/java/net/runelite/api/HealthBar.java | 4 +- .../net/runelite/api/HealthBarOverride.java | 8 +- .../java/net/runelite/api/IndexDataBase.java | 24 - ...emComposition.java => ItemDefinition.java} | 26 +- .../main/java/net/runelite/api/ItemID.java | 61 - .../net/runelite/api/MainBufferProvider.java | 2 +- .../net/runelite/api/MapElementConfig.java | 2 +- .../src/main/java/net/runelite/api/Model.java | 2 +- .../src/main/java/net/runelite/api/NPC.java | 8 +- .../java/net/runelite/api/NPCComposition.java | 117 - .../java/net/runelite/api/NPCDefinition.java | 90 + .../java/net/runelite/api/NullItemID.java | 34 +- ...Composition.java => ObjectDefinition.java} | 4 +- .../java/net/runelite/api/Perspective.java | 20 +- .../main/java/net/runelite/api/Player.java | 7 +- ...Composition.java => PlayerAppearance.java} | 5 +- .../java/net/runelite/api/ScriptEvent.java | 2 +- .../src/main/java/net/runelite/api/Skill.java | 25 - .../api/{SpritePixels.java => Sprite.java} | 6 +- .../src/main/java/net/runelite/api/Tile.java | 4 +- .../java/net/runelite/api/TileObject.java | 4 +- .../main/java/net/runelite/api/VarPlayer.java | 2 +- .../java/net/runelite/api/WallObject.java | 25 +- .../java/net/runelite/api/WidgetNode.java | 26 +- .../src/main/java/net/runelite/api/World.java | 25 - .../main/java/net/runelite/api/WorldType.java | 24 - .../net/runelite/api/config/Constants.java | 105 + .../java/net/runelite/api/coords/Angle.java | 2 +- .../net/runelite/api/coords/LocalPoint.java | 4 +- .../net/runelite/api/coords/WorldArea.java | 14 +- .../net/runelite/api/coords/WorldPoint.java | 6 +- .../runelite/api/events/AnimationChanged.java | 25 +- .../api/events/BoostedLevelChanged.java | 2 +- .../net/runelite/api/events/ChatMessage.java | 4 +- .../runelite/api/events/ClanMemberJoined.java | 2 +- .../runelite/api/events/ClanMemberLeft.java | 2 +- .../api/events/DecorativeObjectChanged.java | 2 +- .../api/events/DecorativeObjectDespawned.java | 2 +- .../api/events/DecorativeObjectSpawned.java | 2 +- .../api/events/ExperienceChanged.java | 2 +- .../api/events/GameObjectDespawned.java | 2 +- .../api/events/GameObjectSpawned.java | 2 +- .../runelite/api/events/GameStateChanged.java | 2 +- .../api/events/GrandExchangeOfferChanged.java | 2 +- .../runelite/api/events/GraphicChanged.java | 2 +- .../api/events/GraphicsObjectCreated.java | 2 +- .../api/events/GroundObjectChanged.java | 2 +- .../api/events/GroundObjectDespawned.java | 2 +- .../api/events/GroundObjectSpawned.java | 2 +- .../runelite/api/events/HitsplatApplied.java | 2 +- .../runelite/api/events/InteractChanged.java | 2 +- .../api/events/InteractingChanged.java | 26 +- .../api/events/ItemContainerChanged.java | 4 +- .../runelite/api/events/ItemDespawned.java | 2 +- .../api/events/ItemQuantityChanged.java | 2 +- .../net/runelite/api/events/ItemSpawned.java | 2 +- .../net/runelite/api/events/MenuOpened.java | 2 +- .../api/events/MenuOptionClicked.java | 4 +- .../api/events/NameableNameChanged.java | 2 +- .../runelite/api/events/NpcActionChanged.java | 6 +- .../net/runelite/api/events/NpcDespawned.java | 2 +- .../net/runelite/api/events/NpcSpawned.java | 2 +- .../api/events/OverheadTextChanged.java | 29 +- .../runelite/api/events/PlayerDespawned.java | 2 +- .../runelite/api/events/PlayerSpawned.java | 2 +- .../runelite/api/events/PostHealthBar.java | 2 +- ...mposition.java => PostItemDefinition.java} | 8 +- .../runelite/api/events/ProjectileMoved.java | 2 +- .../api/events/ScriptCallbackEvent.java | 2 +- .../api/events/SpotAnimationChanged.java | 28 + .../api/events/WallObjectChanged.java | 2 +- .../api/events/WallObjectDespawned.java | 2 +- .../api/events/WallObjectSpawned.java | 2 +- .../api/events/WidgetHiddenChanged.java | 2 +- .../api/events/WidgetMenuOptionClicked.java | 2 +- .../runelite/api/events/WorldListLoad.java | 2 +- .../net/runelite/api/geometry/Geometry.java | 2 +- .../net/runelite/api/hooks/Callbacks.java | 6 +- .../java/net/runelite/api/kit/KitType.java | 6 +- .../java/net/runelite/api/model/Jarvis.java | 2 +- .../java/net/runelite/api/model/Vertex.java | 2 +- .../runelite/api/overlay/OverlayIndex.java | 2 +- .../net/runelite/api/vars/AccountType.java | 28 +- .../java/net/runelite/api/vars/Autoweed.java | 2 +- .../java/net/runelite/api/vars/InputType.java | 2 +- .../java/net/runelite/api/widgets/Widget.java | 8 +- .../runelite/api/widgets/WidgetConfig.java | 3 +- .../net/runelite/api/widgets/WidgetItem.java | 2 +- .../java/net/runelite/mapping/Construct.java | 36 +- .../java/net/runelite/mapping/Export.java | 40 + .../main/java/net/runelite/mapping/Hook.java | 33 +- .../java/net/runelite/mapping/Implements.java | 15 +- .../java/net/runelite/mapping/Import.java | 40 + .../runelite/mapping/ObfuscatedGetter.java | 39 + .../net/runelite/mapping/ObfuscatedName.java | 40 + .../runelite/mapping/ObfuscatedSignature.java | 33 +- .../java/net/runelite/mapping/Protect.java | 23 +- .../java/net/runelite/api/ExperienceTest.java | 2 +- runelite-client/pom.xml | 5 + .../net/runelite/client/game/ItemManager.java | 54 +- .../net/runelite/client/game/LootManager.java | 2 +- .../runelite/client/game/SpriteManager.java | 10 +- .../client/graphics/ModelOutlineRenderer.java | 4 +- .../runelite/client/menus/MenuManager.java | 14 +- .../client/plugins/ammo/AmmoPlugin.java | 8 +- .../plugins/banktags/BankTagsPlugin.java | 8 +- .../plugins/banktags/tabs/TabInterface.java | 10 +- .../plugins/barrows/BarrowsOverlay.java | 13 +- .../chatcommands/ChatCommandsPlugin.java | 6 +- .../plugins/cluescrolls/ClueScrollPlugin.java | 11 +- .../cluescrolls/clues/CrypticClue.java | 6 +- .../plugins/cluescrolls/clues/MapClue.java | 6 +- .../clues/emote/SingleItemRequirement.java | 4 +- .../plugins/combatcounter/CombatCounter.java | 6 +- .../client/plugins/cooking/CookingPlugin.java | 3 +- .../client/plugins/coxhelper/CoxOverlay.java | 14 +- .../client/plugins/coxhelper/CoxPlugin.java | 2 +- .../dailytaskindicators/DailyTasksPlugin.java | 2 +- .../demonicgorilla/DemonicGorilla.java | 4 +- .../plugins/devtools/DevToolsOverlay.java | 12 +- .../plugins/devtools/DevToolsPlugin.java | 10 +- .../EquipmentInspectorPanel.java | 4 +- .../EquipmentInspectorPlugin.java | 10 +- .../plugins/equipmentinspector/ItemPanel.java | 4 +- .../client/plugins/examine/ExaminePlugin.java | 24 +- .../plugins/fightcave/NPCContainer.java | 4 +- .../plugins/fightcave/TimersOverlay.java | 4 +- .../fishing/FishingSpotMinimapOverlay.java | 2 +- .../plugins/fishing/FishingSpotOverlay.java | 2 +- .../freezetimers/FreezeTimersOverlay.java | 2 +- .../freezetimers/FreezeTimersPlugin.java | 4 +- .../plugins/freezetimers/PrayerTracker.java | 2 +- .../grandexchange/GrandExchangeOfferSlot.java | 4 +- .../GrandExchangeOffersPanel.java | 4 +- .../grandexchange/GrandExchangePlugin.java | 4 +- .../GrandExchangeSearchPanel.java | 4 +- .../grounditems/GroundItemsPlugin.java | 16 +- .../highalchemy/HighAlchemyOverlay.java | 8 +- .../idlenotifier/IdleNotifierPlugin.java | 8 +- .../plugins/implings/ImplingsOverlay.java | 8 +- .../instancemap/InstanceMapOverlay.java | 12 +- .../InterfaceStylesPlugin.java | 30 +- .../inventorygrid/InventoryGridConfig.java | 63 - .../inventorygrid/InventoryGridOverlay.java | 116 - .../inventorygrid/InventoryGridPlugin.java | 66 - .../inventorysetups/InventorySetupPlugin.java | 8 +- .../InventoryViewerOverlay.java | 6 +- .../plugins/itemcharges/ItemChargePlugin.java | 4 +- .../plugins/itemprices/ItemPricesOverlay.java | 6 +- .../plugins/itemstats/ItemStatPlugin.java | 2 +- .../keptondeath/ActuallyTradeableItem.java | 2 +- .../keptondeath/KeptOnDeathPlugin.java | 14 +- .../loginscreen/LoginScreenPlugin.java | 52 +- .../loottracker/LootTrackerPlugin.java | 4 +- .../MenuEntrySwapperPlugin.java | 24 +- .../client/plugins/minimap/MinimapDot.java | 6 +- .../client/plugins/minimap/MinimapPlugin.java | 10 +- .../MultiIndicatorsMinimapOverlay.java | 3 +- .../MultiIndicatorsOverlay.java | 3 +- .../MultiIndicatorsPlugin.java | 7 +- .../musicindicator/MusicIndicatorPlugin.java | 6 +- .../plugins/npchighlight/MemorizedNpc.java | 4 +- .../plugins/npchighlight/NpcSceneOverlay.java | 4 +- .../npcunaggroarea/NpcAggroAreaOverlay.java | 3 +- .../npcunaggroarea/NpcAggroAreaPlugin.java | 6 +- .../ObjectIndicatorsPlugin.java | 9 +- .../PlayerIndicatorsOverlay.java | 12 +- .../client/plugins/poison/PoisonPlugin.java | 2 +- .../PrayAgainstPlayerOverlay.java | 6 +- .../plugins/prayagainstplayer/WeaponType.java | 6 +- .../plugins/pvptools/PvpToolsPlugin.java | 14 +- .../pyramidplunder/PyramidPlunderOverlay.java | 7 +- .../SkillCalculatorPlugin.java | 2 +- .../skillcalculator/banked/CriticalItem.java | 8 +- .../client/plugins/slayer/SlayerPlugin.java | 10 +- .../plugins/slayer/TargetClickboxOverlay.java | 6 +- .../specialcounter/SpecialCounterPlugin.java | 4 +- .../plugins/statusbars/StatusBarsPlugin.java | 4 +- .../StonedLootTrackerPlugin.java | 8 +- .../SuppliesTrackerPlugin.java | 8 +- .../client/plugins/theatre/RoomHandler.java | 2 +- .../client/plugins/timers/TimersPlugin.java | 14 +- .../timetracking/farming/FarmingTracker.java | 2 +- .../client/plugins/tmorph/TMorph.java | 76 +- .../whalewatchers/WhaleWatchersPlugin.java | 2 +- .../client/plugins/wiki/WikiPlugin.java | 11 +- .../net/runelite/client/rs/ClientLoader.java | 81 +- .../net/runelite/client/ui/ClientPanel.java | 2 +- .../client/ui/overlay/arrow/ArrowUtil.java | 7 +- .../net/runelite/client/util/ImageUtil.java | 6 +- .../net/runelite/client/util/PvPUtil.java | 8 +- .../plugins/bank/BankCalculationTest.java | 6 +- .../plugins/cooking/CookingPluginTest.java | 2 +- .../plugins/examine/ExaminePluginTest.java | 2 +- .../GrandExchangeOfferSlotTest.java | 4 +- .../idlenotifier/IdleNotifierPluginTest.java | 10 +- .../java/net/runelite/mixins/CameraMixin.java | 2 +- .../net/runelite/mixins/ClickboxMixin.java | 10 +- .../net/runelite/mixins/EntityHiderMixin.java | 16 +- .../runelite/mixins/GraphicsObjectMixin.java | 54 - .../java/net/runelite/mixins/MenuMixin.java | 42 +- .../net/runelite/mixins/MinimapMixin.java | 8 +- .../mixins/ProcessClientErrorMixin.java | 24 +- ...in.java => RSAbstractIndexCacheMixin.java} | 44 +- .../net/runelite/mixins/RSActorMixin.java | 108 +- .../mixins/RSBoundaryObjectMixin.java | 100 + .../net/runelite/mixins/RSCanvasMixin.java | 68 + ...fferMixin.java => RSChatChannelMixin.java} | 10 +- .../net/runelite/mixins/RSClanChatMixin.java | 47 + .../net/runelite/mixins/RSClanMateMixin.java | 24 + .../mixins/RSClanMemberManagerMixin.java | 77 - .../net/runelite/mixins/RSClientMixin.java | 210 +- .../runelite/mixins/RSDynamicObjectMixin.java | 4 +- .../mixins/RSEnumDefinitionMixin.java | 51 + .../mixins/RSFloorDecorationMixin.java | 61 + .../runelite/mixins/RSFriendManagerMixin.java | 48 - .../net/runelite/mixins/RSFriendMixin.java | 4 +- .../runelite/mixins/RSFriendSystemMixin.java | 24 + .../runelite/mixins/RSGameCanvasMixin.java | 93 - .../runelite/mixins/RSGameObjectMixin.java | 10 +- ...EngineMixin.java => RSGameShellMixin.java} | 12 +- .../mixins/RSGraphicsObjectMixin.java | 30 + ...SItemMixin.java => RSGroundItemMixin.java} | 34 +- .../mixins/RSGroundItemPileMixin.java | 34 + .../mixins/RSHealthBarDefinitionMixin.java | 89 + .../net/runelite/mixins/RSHealthBarMixin.java | 113 - .../net/runelite/mixins/RSIgnoredMixin.java | 25 + .../mixins/RSItemCompositionMixin.java | 92 - .../runelite/mixins/RSItemContainerMixin.java | 8 +- .../mixins/RSItemDefinitionMixin.java | 67 + .../mixins/RSKeyFocusListenerMixin.java | 95 - .../runelite/mixins/RSKeyHandlerMixin.java | 71 + .../net/runelite/mixins/RSMessageMixin.java | 73 + .../net/runelite/mixins/RSModelDataMixin.java | 7 +- .../net/runelite/mixins/RSModelMixin.java | 38 +- ...putMixin.java => RSMouseHandlerMixin.java} | 32 +- .../mixins/RSMouseWheelHandlerMixin.java | 4 +- .../runelite/mixins/RSNPCDefinitionMixin.java | 50 + .../java/net/runelite/mixins/RSNPCMixin.java | 30 +- .../mixins/RSNameableContainerMixin.java | 72 - .../net/runelite/mixins/RSNameableMixin.java | 48 - .../runelite/mixins/RSNodeHashTableMixin.java | 38 + .../java/net/runelite/mixins/RSNodeMixin.java | 2 +- .../mixins/RSNpcCompositionMixin.java | 74 - .../mixins/RSPlayerAppearanceMixin.java | 34 + .../net/runelite/mixins/RSPlayerMixin.java | 64 +- .../runelite/mixins/RSProjectileMixin.java | 4 +- ...rMixin.java => RSRasterProviderMixin.java} | 34 +- ...r2DMixin.java => RSRasterizer2DMixin.java} | 28 +- .../net/runelite/mixins/RSSceneMixin.java | 42 +- .../mixins/RSSceneTileModelMixin.java | 84 - .../mixins/RSSceneTilePaintMixin.java | 84 - ...in.java => RSSequenceDefinitionMixin.java} | 58 +- ...itePixelsMixin.java => RSSpriteMixin.java} | 34 +- .../net/runelite/mixins/RSTextureMixin.java | 6 +- .../mixins/RSTextureProviderMixin.java | 4 +- .../java/net/runelite/mixins/RSTileMixin.java | 139 +- .../net/runelite/mixins/RSTileModelMixin.java | 60 + .../runelite/mixins/RSTileObjectMixin.java | 89 + .../net/runelite/mixins/RSTilePaintMixin.java | 60 + .../net/runelite/mixins/RSUserListMixin.java | 47 + .../net/runelite/mixins/RSVarcsMixin.java | 6 +- ...tMixin.java => RSWallDecorationMixin.java} | 42 +- .../runelite/mixins/RSWallObjectMixin.java | 124 - .../net/runelite/mixins/RSWidgetMixin.java | 41 +- .../mixins/RSWorldMapManagerMixin.java | 34 + .../net/runelite/mixins/RSWorldMapMixin.java | 29 + .../net/runelite/mixins/RSWorldMixin.java | 6 +- .../net/runelite/mixins/ScriptVMMixin.java | 16 +- .../java/net/runelite/mixins/SpriteMixin.java | 51 +- .../mixins/StretchedModeMaxSizeMixin.java | 33 +- .../runelite/mixins/StretchedModeMixin.java | 27 +- .../net/runelite/mixins/TileObjectMixin.java | 113 - .../java/net/runelite/mixins/VarbitMixin.java | 50 +- .../runelite/mixins/WidgetSpriteMixin.java | 43 +- .../runelite/mixins/WorldHoppingMixin.java | 30 +- .../runelite/mixins/WorldMapManagerMixin.java | 58 - .../net/runelite/mixins/WorldMapMixin.java | 53 - .../net/runelite/rs/api/RSAbstractFont.java | 18 + .../runelite/rs/api/RSAbstractIndexCache.java | 10 + .../rs/api/RSAbstractRasterProvider.java | 50 + .../java/net/runelite/rs/api/RSActor.java | 124 +- .../rs/api/{RSFrame.java => RSAnimation.java} | 16 +- .../net/runelite/rs/api/RSBoundaryObject.java | 41 + .../java/net/runelite/rs/api/RSBuddy.java | 14 + .../java/net/runelite/rs/api/RSBuffer.java | 30 +- .../java/net/runelite/rs/api/RSCanvas.java | 5 + .../net/runelite/rs/api/RSChatChannel.java | 18 + .../net/runelite/rs/api/RSChatLineBuffer.java | 45 - .../java/net/runelite/rs/api/RSClanChat.java | 12 + .../java/net/runelite/rs/api/RSClanMate.java | 7 + .../runelite/rs/api/RSClanMemberManager.java | 36 - .../java/net/runelite/rs/api/RSClient.java | 504 +- .../runelite/rs/api/RSClientPreferences.java | 15 + .../net/runelite/rs/api/RSCollisionMap.java | 10 + .../net/runelite/rs/api/RSCombatInfoList.java | 36 - .../{RSCacheableNode.java => RSDualNode.java} | 4 +- .../net/runelite/rs/api/RSDynamicObject.java | 32 +- .../api/{RSRenderable.java => RSEntity.java} | 8 +- .../main/java/net/runelite/rs/api/RSEnum.java | 49 - .../net/runelite/rs/api/RSEnumDefinition.java | 25 + .../rs/api/RSEvictingDualNodeHashTable.java | 22 + .../net/runelite/rs/api/RSFileOnDisk.java | 28 +- .../runelite/rs/api/RSFloorDecoration.java | 23 + .../main/java/net/runelite/rs/api/RSFont.java | 27 +- .../net/runelite/rs/api/RSFontTypeFace.java | 42 - .../java/net/runelite/rs/api/RSFrames.java | 6 +- .../java/net/runelite/rs/api/RSFriend.java | 26 +- .../runelite/rs/api/RSFriendContainer.java | 29 - .../net/runelite/rs/api/RSFriendManager.java | 40 - .../net/runelite/rs/api/RSFriendSystem.java | 16 + .../net/runelite/rs/api/RSFriendsList.java | 5 + .../net/runelite/rs/api/RSGameObject.java | 42 +- .../{RSGameEngine.java => RSGameShell.java} | 9 +- .../runelite/rs/api/RSGrandExchangeOffer.java | 34 +- .../net/runelite/rs/api/RSGraphicsObject.java | 30 +- .../net/runelite/rs/api/RSGroundItem.java | 36 + .../net/runelite/rs/api/RSGroundItemPile.java | 34 + .../java/net/runelite/rs/api/RSHealthBar.java | 44 +- .../rs/api/RSHealthBarDefinition.java | 20 + .../runelite/rs/api/RSHealthBarUpdate.java | 12 + .../java/net/runelite/rs/api/RSIgnore.java | 31 - .../runelite/rs/api/RSIgnoreContainer.java | 29 - .../net/runelite/rs/api/RSIgnoreList.java | 5 + .../java/net/runelite/rs/api/RSIgnored.java | 7 + .../net/runelite/rs/api/RSIndexCache.java | 9 + .../java/net/runelite/rs/api/RSIndexData.java | 33 - .../net/runelite/rs/api/RSIndexDataBase.java | 34 - .../net/runelite/rs/api/RSIndexedSprite.java | 48 +- .../net/runelite/rs/api/RSIntegerNode.java | 28 +- .../runelite/rs/api/RSItemComposition.java | 92 - .../net/runelite/rs/api/RSItemContainer.java | 28 +- .../net/runelite/rs/api/RSItemDefinition.java | 63 + .../runelite/rs/api/RSIterableHashTable.java | 35 - .../runelite/rs/api/RSIterableNodeDeque.java | 9 + .../rs/api/RSIterableNodeHashTable.java | 11 + .../runelite/rs/api/RSKeyFocusListener.java | 33 - .../net/runelite/rs/api/RSKeyHandler.java | 10 + .../java/net/runelite/rs/api/RSLoginType.java | 5 + .../java/net/runelite/rs/api/RSMessage.java | 38 + .../java/net/runelite/rs/api/RSModel.java | 39 +- .../java/net/runelite/rs/api/RSModelData.java | 40 +- .../net/runelite/rs/api/RSMouseHandler.java | 9 + .../net/runelite/rs/api/RSMouseInput.java | 33 - .../net/runelite/rs/api/RSMouseRecorder.java | 33 +- .../runelite/rs/api/RSMouseWheelHandler.java | 24 - .../main/java/net/runelite/rs/api/RSNPC.java | 28 +- .../net/runelite/rs/api/RSNPCDefinition.java | 54 + .../java/net/runelite/rs/api/RSNameable.java | 37 - .../runelite/rs/api/RSNameableContainer.java | 55 - .../main/java/net/runelite/rs/api/RSNode.java | 4 +- .../java/net/runelite/rs/api/RSNodeCache.java | 46 - .../java/net/runelite/rs/api/RSNodeDeque.java | 12 + .../net/runelite/rs/api/RSNodeHashTable.java | 17 + .../runelite/rs/api/RSObjectDefinition.java | 35 + .../net/runelite/rs/api/RSPacketBuffer.java | 24 - .../java/net/runelite/rs/api/RSPlayer.java | 16 +- .../runelite/rs/api/RSPlayerAppearance.java | 25 + .../net/runelite/rs/api/RSProjectile.java | 60 +- .../net/runelite/rs/api/RSRasterProvider.java | 48 + .../runelite/rs/api/RSReflectionCheck.java | 17 + .../net/runelite/rs/api/RSRenderOverview.java | 77 - .../net/runelite/rs/api/RSRunException.java | 26 +- .../java/net/runelite/rs/api/RSScene.java | 42 +- .../java/net/runelite/rs/api/RSScript.java | 28 +- .../net/runelite/rs/api/RSScriptEvent.java | 36 +- .../java/net/runelite/rs/api/RSSequence.java | 51 - .../runelite/rs/api/RSSequenceDefinition.java | 28 + .../api/{RSFrameMap.java => RSSkeleton.java} | 6 +- .../net/runelite/rs/api/RSSoundEffect.java | 24 - .../java/net/runelite/rs/api/RSSprite.java | 59 +- .../java/net/runelite/rs/api/RSTexture.java | 26 +- .../runelite/rs/api/RSTextureProvider.java | 30 +- .../main/java/net/runelite/rs/api/RSTile.java | 58 +- .../java/net/runelite/rs/api/RSTileModel.java | 63 + .../java/net/runelite/rs/api/RSTilePaint.java | 31 + .../main/java/net/runelite/rs/api/RSUser.java | 13 + .../java/net/runelite/rs/api/RSUserList.java | 31 + .../rs/api/{RSName.java => RSUsername.java} | 4 +- .../java/net/runelite/rs/api/RSVarbit.java | 39 - .../runelite/rs/api/RSVarbitDefinition.java | 15 + .../java/net/runelite/rs/api/RSVarcs.java | 26 +- .../net/runelite/rs/api/RSWallDecoration.java | 36 + .../java/net/runelite/rs/api/RSWidget.java | 160 +- .../runelite/rs/api/RSWidgetGroupParent.java | 11 + .../net/runelite/rs/api/RSWidgetNode.java | 35 - .../java/net/runelite/rs/api/RSWorld.java | 36 +- .../java/net/runelite/rs/api/RSWorldMap.java | 53 + .../net/runelite/rs/api/RSWorldMapArea.java | 10 + .../net/runelite/rs/api/RSWorldMapData.java | 34 - .../runelite/rs/api/RSWorldMapElement.java | 11 + .../runelite/rs/api/RSWorldMapManager.java | 30 +- runescape-client/pom.xml | 67 + .../main/java/AbstractByteArrayCopier.java | 104 + .../src/main/java/AbstractFont.java | 1072 + .../src/main/java/AbstractIndexCache.java | 783 + .../src/main/java/AbstractRasterProvider.java | 54 + .../src/main/java/AbstractSocket.java | 72 + .../src/main/java/AbstractSound.java | 11 + .../src/main/java/AbstractUserComparator.java | 69 + .../src/main/java/AbstractWorldMapIcon.java | 176 + .../src/main/java/AccessFile.java | 188 + runescape-client/src/main/java/Actor.java | 1358 + runescape-client/src/main/java/Animation.java | 136 + .../src/main/java/AttackOption.java | 220 + .../src/main/java/AudioFilter.java | 161 + .../src/main/java/BoundaryObject.java | 135 + runescape-client/src/main/java/Bounds.java | 171 + runescape-client/src/main/java/Buddy.java | 95 + runescape-client/src/main/java/Buffer.java | 1098 + .../src/main/java/BufferedFile.java | 410 + .../src/main/java/BufferedNetSocket.java | 113 + .../src/main/java/BufferedSink.java | 258 + .../src/main/java/BufferedSource.java | 285 + .../src/main/java/ByteArrayNode.java | 15 + .../src/main/java/ByteArrayPool.java | 151 + .../src/main/java/Bzip2Decompressor.java | 641 + .../src/main/java/Bzip2State.java | 193 + runescape-client/src/main/java/Canvas.java | 267 + .../src/main/java/ChatChannel.java | 352 + runescape-client/src/main/java/ClanChat.java | 229 + runescape-client/src/main/java/ClanMate.java | 94 + runescape-client/src/main/java/Client.java | 6626 ++++ .../src/main/java/ClientPacket.java | 754 + .../src/main/java/ClientPacketMarker.java | 7 + .../src/main/java/ClientParameter.java | 204 + .../src/main/java/ClientPreferences.java | 162 + runescape-client/src/main/java/Clock.java | 90 + .../src/main/java/CollisionMap.java | 512 + runescape-client/src/main/java/Decimator.java | 246 + .../src/main/java/DemotingHashTable.java | 142 + .../java/DesktopPlatformInfoProvider.java | 191 + .../src/main/java/DevicePcmPlayer.java | 125 + .../main/java/DevicePcmPlayerProvider.java | 796 + .../src/main/java/DirectByteArrayCopier.java | 36 + .../src/main/java/DirectWrapper.java | 26 + runescape-client/src/main/java/DualNode.java | 35 + .../src/main/java/DualNodeDeque.java | 106 + .../src/main/java/DynamicObject.java | 634 + runescape-client/src/main/java/Entity.java | 41 + .../src/main/java/EnumDefinition.java | 128 + .../src/main/java/Enumerated.java | 14 + .../main/java/EvictingDualNodeHashTable.java | 105 + .../src/main/java/FaceNormal.java | 121 + .../src/main/java/FloorDecoration.java | 117 + runescape-client/src/main/java/Font.java | 96 + runescape-client/src/main/java/FontName.java | 588 + runescape-client/src/main/java/Fonts.java | 89 + .../src/main/java/Formatting.java | 126 + runescape-client/src/main/java/Frames.java | 90 + runescape-client/src/main/java/Friend.java | 43 + .../src/main/java/FriendLoginUpdate.java | 40 + .../src/main/java/FriendSystem.java | 333 + .../src/main/java/FriendsList.java | 156 + .../src/main/java/GameObject.java | 111 + runescape-client/src/main/java/GameShell.java | 1132 + .../src/main/java/GrandExchangeEvent.java | 432 + .../src/main/java/GrandExchangeEvents.java | 185 + .../src/main/java/GrandExchangeOffer.java | 181 + .../src/main/java/GraphicsObject.java | 154 + .../src/main/java/GroundItem.java | 68 + .../src/main/java/GroundItemPile.java | 106 + .../src/main/java/GzipDecompressor.java | 75 + runescape-client/src/main/java/HealthBar.java | 184 + .../src/main/java/HealthBarDefinition.java | 215 + .../src/main/java/HealthBarUpdate.java | 94 + .../src/main/java/HitSplatDefinition.java | 414 + runescape-client/src/main/java/Huffman.java | 334 + .../src/main/java/IgnoreList.java | 153 + runescape-client/src/main/java/Ignored.java | 61 + .../src/main/java/IndexCache.java | 565 + .../src/main/java/IndexCacheLoader.java | 709 + .../src/main/java/IndexStore.java | 488 + .../src/main/java/IndexStoreAction.java | 130 + .../main/java/IndexStoreActionHandler.java | 108 + .../src/main/java/IndexedSprite.java | 275 + .../src/main/java/Instrument.java | 414 + .../src/main/java/IntHashTable.java | 60 + .../src/main/java/IntegerNode.java | 15 + .../src/main/java/Interpreter.java | 229 + .../src/main/java/InvDefinition.java | 69 + .../src/main/java/IsaacCipher.java | 351 + .../src/main/java/ItemContainer.java | 99 + .../src/main/java/ItemDefinition.java | 914 + .../src/main/java/IterableDualNodeQueue.java | 121 + .../java/IterableDualNodeQueueIterator.java | 70 + .../src/main/java/IterableNodeDeque.java | 144 + .../IterableNodeDequeDescendingIterator.java | 85 + .../src/main/java/IterableNodeHashTable.java | 146 + .../java/IterableNodeHashTableIterator.java | 102 + .../src/main/java/KeyHandler.java | 262 + .../src/main/java/KitDefinition.java | 271 + runescape-client/src/main/java/Link.java | 32 + runescape-client/src/main/java/LinkDeque.java | 75 + runescape-client/src/main/java/Login.java | 248 + .../src/main/java/LoginPacket.java | 120 + runescape-client/src/main/java/LoginType.java | 104 + .../src/main/java/MenuAction.java | 159 + runescape-client/src/main/java/Message.java | 471 + runescape-client/src/main/java/Messages.java | 63 + .../src/main/java/MidiFileReader.java | 259 + .../src/main/java/MidiPcmStream.java | 1131 + .../src/main/java/MilliClock.java | 241 + runescape-client/src/main/java/Model.java | 1724 + runescape-client/src/main/java/ModelData.java | 1760 + .../src/main/java/ModelData0.java | 22 + .../src/main/java/MouseHandler.java | 293 + .../src/main/java/MouseRecorder.java | 383 + .../src/main/java/MouseWheel.java | 16 + .../src/main/java/MouseWheelHandler.java | 60 + .../src/main/java/MusicPatch.java | 543 + .../src/main/java/MusicPatchNode.java | 155 + .../src/main/java/MusicPatchNode2.java | 63 + .../src/main/java/MusicPatchPcmStream.java | 202 + .../src/main/java/MusicSample.java | 655 + .../src/main/java/MusicTrack.java | 435 + runescape-client/src/main/java/NanoClock.java | 56 + runescape-client/src/main/java/NetCache.java | 148 + .../src/main/java/NetFileRequest.java | 115 + runescape-client/src/main/java/NetSocket.java | 544 + runescape-client/src/main/java/Node.java | 41 + runescape-client/src/main/java/NodeDeque.java | 182 + .../src/main/java/NodeHashTable.java | 139 + runescape-client/src/main/java/Npc.java | 194 + .../src/main/java/NpcDefinition.java | 747 + .../src/main/java/ObjectDefinition.java | 950 + .../src/main/java/ObjectNode.java | 15 + .../src/main/java/ObjectSound.java | 137 + runescape-client/src/main/java/Occluder.java | 196 + .../src/main/java/OverlayDefinition.java | 249 + .../src/main/java/OwnWorldComparator.java | 88 + .../src/main/java/PacketBuffer.java | 234 + .../src/main/java/PacketBufferNode.java | 72 + .../src/main/java/PacketWriter.java | 206 + .../src/main/java/ParamKeyDefinition.java | 395 + runescape-client/src/main/java/PcmPlayer.java | 475 + .../src/main/java/PcmPlayerProvider.java | 16 + runescape-client/src/main/java/PcmStream.java | 68 + .../src/main/java/PcmStreamMixer.java | 210 + .../src/main/java/PcmStreamMixerListener.java | 23 + .../src/main/java/PlatformInfo.java | 216 + .../src/main/java/PlatformInfoProvider.java | 16 + runescape-client/src/main/java/Player.java | 545 + .../src/main/java/PlayerAppearance.java | 417 + .../src/main/java/PlayerType.java | 100 + runescape-client/src/main/java/Players.java | 193 + .../src/main/java/Projectile.java | 282 + .../src/main/java/RasterProvider.java | 99 + .../src/main/java/Rasterizer2D.java | 836 + .../src/main/java/Rasterizer3D.java | 3449 ++ .../src/main/java/RawPcmStream.java | 1592 + runescape-client/src/main/java/RawSound.java | 60 + .../src/main/java/RectangleMode.java | 68 + .../src/main/java/ReflectionCheck.java | 57 + .../src/main/java/RunException.java | 70 + runescape-client/src/main/java/Scene.java | 2603 ++ runescape-client/src/main/java/Script.java | 138 + .../src/main/java/ScriptEvent.java | 355 + .../src/main/java/ScriptFrame.java | 70 + .../src/main/java/SecureRandomCallable.java | 143 + .../src/main/java/SecureRandomFuture.java | 102 + .../src/main/java/SequenceDefinition.java | 378 + .../src/main/java/ServerBuild.java | 64 + .../src/main/java/ServerPacket.java | 731 + runescape-client/src/main/java/Skeleton.java | 195 + runescape-client/src/main/java/Skills.java | 93 + .../src/main/java/SoftWrapper.java | 27 + .../src/main/java/SoundCache.java | 225 + .../src/main/java/SoundEffect.java | 133 + .../src/main/java/SoundEnvelope.java | 111 + .../src/main/java/SoundSystem.java | 72 + .../main/java/SpotAnimationDefinition.java | 243 + runescape-client/src/main/java/Sprite.java | 1666 + runescape-client/src/main/java/SpriteIds.java | 169 + .../src/main/java/SpriteMask.java | 107 + runescape-client/src/main/java/Strings.java | 65 + .../src/main/java/StructDefinition.java | 292 + .../src/main/java/StudioGame.java | 93 + runescape-client/src/main/java/Task.java | 38 + .../src/main/java/TaskHandler.java | 179 + runescape-client/src/main/java/Texture.java | 268 + .../src/main/java/TextureLoader.java | 35 + .../src/main/java/TextureProvider.java | 480 + runescape-client/src/main/java/Tile.java | 289 + .../src/main/java/TileLocation.java | 102 + runescape-client/src/main/java/TileModel.java | 315 + runescape-client/src/main/java/TilePaint.java | 130 + runescape-client/src/main/java/Tiles.java | 99 + runescape-client/src/main/java/Timer.java | 192 + .../main/java/TotalQuantityComparator.java | 213 + runescape-client/src/main/java/TriBool.java | 51 + .../src/main/java/UnderlayDefinition.java | 186 + .../src/main/java/UnitPriceComparator.java | 206 + .../src/main/java/UrlRequest.java | 58 + .../src/main/java/UrlRequester.java | 295 + runescape-client/src/main/java/User.java | 82 + .../src/main/java/UserComparator1.java | 39 + .../src/main/java/UserComparator10.java | 57 + .../src/main/java/UserComparator2.java | 39 + .../src/main/java/UserComparator3.java | 54 + .../src/main/java/UserComparator4.java | 95 + .../src/main/java/UserComparator5.java | 66 + .../src/main/java/UserComparator6.java | 75 + .../src/main/java/UserComparator7.java | 167 + .../src/main/java/UserComparator8.java | 50 + .../src/main/java/UserComparator9.java | 93 + runescape-client/src/main/java/UserList.java | 333 + runescape-client/src/main/java/Username.java | 92 + runescape-client/src/main/java/Usernamed.java | 16 + .../src/main/java/VarbitDefinition.java | 97 + runescape-client/src/main/java/VarcInt.java | 82 + runescape-client/src/main/java/Varcs.java | 433 + .../src/main/java/VarpDefinition.java | 72 + runescape-client/src/main/java/Varps.java | 61 + .../src/main/java/VertexNormal.java | 81 + .../src/main/java/ViewportMouse.java | 154 + .../src/main/java/WallDecoration.java | 106 + runescape-client/src/main/java/Widget.java | 1594 + .../src/main/java/WidgetGroupParent.java | 113 + runescape-client/src/main/java/World.java | 146 + .../src/main/java/WorldComparator.java | 207 + runescape-client/src/main/java/WorldMap.java | 1439 + .../src/main/java/WorldMapArea.java | 444 + .../src/main/java/WorldMapAreaData.java | 297 + .../src/main/java/WorldMapCacheName.java | 189 + .../src/main/java/WorldMapElement.java | 331 + .../src/main/java/WorldMapEvent.java | 269 + .../src/main/java/WorldMapIcon1.java | 219 + .../src/main/java/WorldMapIcon2.java | 198 + .../main/java/WorldMapIndexCacheLoader.java | 109 + .../src/main/java/WorldMapLabel.java | 266 + .../src/main/java/WorldMapLabelSize.java | 135 + .../src/main/java/WorldMapManager.java | 529 + .../src/main/java/WorldMapRegion.java | 1153 + .../src/main/java/WorldMapSection.java | 56 + .../src/main/java/WorldMapSection0.java | 294 + .../src/main/java/WorldMapSection1.java | 330 + .../src/main/java/WorldMapSection2.java | 317 + .../src/main/java/WorldMapSection3.java | 272 + .../src/main/java/WorldMapSectionType.java | 141 + runescape-client/src/main/java/Wrapper.java | 23 + runescape-client/src/main/java/class0.java | 19 + runescape-client/src/main/java/class1.java | 278 + runescape-client/src/main/java/class102.java | 316 + runescape-client/src/main/java/class109.java | 121 + runescape-client/src/main/java/class11.java | 274 + runescape-client/src/main/java/class114.java | 36 + runescape-client/src/main/java/class12.java | 164 + runescape-client/src/main/java/class13.java | 86 + runescape-client/src/main/java/class14.java | 63 + runescape-client/src/main/java/class15.java | 210 + runescape-client/src/main/java/class157.java | 45 + runescape-client/src/main/java/class159.java | 61 + runescape-client/src/main/java/class16.java | 591 + runescape-client/src/main/java/class160.java | 5 + runescape-client/src/main/java/class161.java | 14 + runescape-client/src/main/java/class168.java | 72 + runescape-client/src/main/java/class171.java | 657 + runescape-client/src/main/java/class178.java | 25 + runescape-client/src/main/java/class179.java | 81 + runescape-client/src/main/java/class190.java | 135 + runescape-client/src/main/java/class192.java | 13 + runescape-client/src/main/java/class196.java | 50 + runescape-client/src/main/java/class197.java | 13 + runescape-client/src/main/java/class198.java | 14 + runescape-client/src/main/java/class2.java | 149 + runescape-client/src/main/java/class203.java | 78 + runescape-client/src/main/java/class204.java | 99 + runescape-client/src/main/java/class206.java | 14 + runescape-client/src/main/java/class21.java | 444 + runescape-client/src/main/java/class210.java | 219 + runescape-client/src/main/java/class211.java | 220 + runescape-client/src/main/java/class212.java | 73 + runescape-client/src/main/java/class214.java | 121 + runescape-client/src/main/java/class22.java | 123 + runescape-client/src/main/java/class226.java | 148 + runescape-client/src/main/java/class227.java | 385 + runescape-client/src/main/java/class229.java | 141 + runescape-client/src/main/java/class230.java | 85 + runescape-client/src/main/java/class231.java | 196 + runescape-client/src/main/java/class233.java | 50 + runescape-client/src/main/java/class234.java | 52 + runescape-client/src/main/java/class236.java | 134 + runescape-client/src/main/java/class237.java | 15 + runescape-client/src/main/java/class238.java | 598 + runescape-client/src/main/java/class248.java | 333 + runescape-client/src/main/java/class249.java | 47 + runescape-client/src/main/java/class25.java | 103 + runescape-client/src/main/java/class258.java | 67 + runescape-client/src/main/java/class266.java | 68 + runescape-client/src/main/java/class27.java | 71 + runescape-client/src/main/java/class277.java | 114 + runescape-client/src/main/java/class279.java | 29 + runescape-client/src/main/java/class3.java | 330 + runescape-client/src/main/java/class30.java | 123 + runescape-client/src/main/java/class303.java | 13 + runescape-client/src/main/java/class304.java | 13 + runescape-client/src/main/java/class305.java | 17 + runescape-client/src/main/java/class306.java | 91 + runescape-client/src/main/java/class307.java | 104 + runescape-client/src/main/java/class308.java | 16 + runescape-client/src/main/java/class309.java | 13 + runescape-client/src/main/java/class31.java | 270 + runescape-client/src/main/java/class310.java | 37 + runescape-client/src/main/java/class311.java | 41 + runescape-client/src/main/java/class313.java | 77 + runescape-client/src/main/java/class32.java | 109 + runescape-client/src/main/java/class322.java | 27 + runescape-client/src/main/java/class328.java | 37 + runescape-client/src/main/java/class337.java | 10 + runescape-client/src/main/java/class39.java | 828 + runescape-client/src/main/java/class4.java | 331 + runescape-client/src/main/java/class40.java | 884 + runescape-client/src/main/java/class46.java | 25 + runescape-client/src/main/java/class48.java | 73 + runescape-client/src/main/java/class50.java | 266 + runescape-client/src/main/java/class54.java | 1200 + runescape-client/src/main/java/class60.java | 28 + runescape-client/src/main/java/class65.java | 238 + runescape-client/src/main/java/class68.java | 136 + runescape-client/src/main/java/class72.java | 639 + runescape-client/src/main/java/class80.java | 47 + runescape-client/src/main/java/class83.java | 65 + runescape-client/src/main/java/class98.java | 228 + .../main/java/net/runelite/rs/Opcodes.java | 4 + .../main/java/net/runelite/rs/Reflection.java | 315 + 1111 files changed, 135441 insertions(+), 44733 deletions(-) create mode 100644 deobfuscator/pom.xml create mode 100644 deobfuscator/src/main/java/net/runelite/asm/ClassFile.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/ClassGroup.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/Field.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/Interfaces.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/Method.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/Type.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/Annotations.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/Code.java rename runescape-api/src/main/java/net/runelite/rs/api/RSItem.java => deobfuscator/src/main/java/net/runelite/asm/attributes/Exceptions.java (69%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/annotation/Annotation.java rename runescape-api/src/main/java/net/runelite/rs/api/RSMessageNode.java => deobfuscator/src/main/java/net/runelite/asm/attributes/annotation/Element.java (70%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/Exception.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/Exceptions.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/Instruction.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/InstructionType.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/Instructions.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/Label.java rename runelite-mixins/src/main/java/net/runelite/mixins/RSItemLayerMixin.java => deobfuscator/src/main/java/net/runelite/asm/attributes/code/LocalVariable.java (61%) rename runelite-mixins/src/main/java/net/runelite/mixins/RSIgnoreMixin.java => deobfuscator/src/main/java/net/runelite/asm/attributes/code/Parameter.java (71%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/AdditionInstruction.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayLoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayStoreInstruction.java rename runescape-api/src/main/java/net/runelite/rs/api/RSClanMember.java => deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ComparisonInstruction.java (91%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ConversionInstruction.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/DivisionInstruction.java rename runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java => deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/DupInstruction.java (67%) rename runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfo1.java => deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/FieldInstruction.java (86%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/GetFieldInstruction.java rename runescape-api/src/main/java/net/runelite/rs/api/RSDeque.java => deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/IntInstruction.java (89%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/InvokeInstruction.java rename runescape-api/src/main/java/net/runelite/rs/api/RSHashTable.java => deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/JumpingInstruction.java (83%) rename runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfoListHolder.java => deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/LVTInstruction.java (84%) rename runescape-api/src/main/java/net/runelite/rs/api/RSClassInfo.java => deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/LVTInstructionType.java (83%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/MappableInstruction.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/PushConstantInstruction.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ReturnInstruction.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/SetFieldInstruction.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/SubtractionInstruction.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/TypeInstruction.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/AALoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/AAStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/AConstNull.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/ALoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/ANewArray.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/AStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/AThrow.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/ArrayLength.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/ArrayStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/BALoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/BAStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/BiPush.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/CALoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/CAStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/CheckCast.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/D2F.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/D2I.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/D2L.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DALoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DAStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DAdd.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DCmpG.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DCmpL.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DDiv.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DLoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DMul.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DNeg.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DRem.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/DSub.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/Dup.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/Dup2.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/Dup2_X1.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/Dup2_X2.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/Dup_X1.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/Dup_X2.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/F2D.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/F2I.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/F2L.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FALoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FAStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FAdd.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FCmpG.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FCmpL.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FDiv.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FLoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FMul.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FNeg.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FRem.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/FSub.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/GetField.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/GetStatic.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/Goto.java rename runelite-mixins/src/main/java/net/runelite/mixins/RSMessageNodeMixin.java => deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/GotoW.java (50%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/I2B.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/I2C.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/I2D.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/I2F.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/I2L.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/I2S.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IALoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IAStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IAdd.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IAnd.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IConstZero.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IDiv.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IInc.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/ILoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IMul.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/INeg.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IOr.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IRem.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IShL.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IShR.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/ISub.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IUShR.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IXor.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/If.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/If0.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfACmpEq.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfACmpNe.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfCmpGe.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfCmpGt.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfCmpLe.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfCmpLt.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfEq.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfGe.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfGt.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfICmpEq.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfICmpNe.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfLe.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfLt.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfNe.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfNonNull.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/IfNull.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/InstanceOf.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeDynamic.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeInterface.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeSpecial.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeStatic.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeVirtual.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/L2D.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/L2F.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/L2I.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LALoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LAStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LAdd.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LAnd.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LCmp.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LDC.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LDiv.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LLoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LMul.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LNeg.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LOr.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LRem.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LShL.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LShR.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LSub.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LUShR.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LXor.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/LookupSwitch.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/MonitorEnter.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/MonitorExit.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/MultiANewArray.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/NOP.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/New.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/NewArray.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/Pop.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/Pop2.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/PutField.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/PutStatic.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/Return.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/SALoad.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/SAStore.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/SiPush.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/Swap.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/TableSwitch.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/VReturn.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/Execution.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/ExecutionVisitor.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/Frame.java rename runescape-api/src/main/java/net/runelite/rs/api/RSGameCanvas.java => deobfuscator/src/main/java/net/runelite/asm/execution/FrameVisitor.java (93%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/InstructionContext.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/MethodContext.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/MethodContextVisitor.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/ParallellMappingExecutor.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/Stack.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/StackContext.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/StaticStep.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/Value.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/VariableContext.java rename runelite-mixins/src/main/java/net/runelite/mixins/RSClanMemberMixin.java => deobfuscator/src/main/java/net/runelite/asm/execution/Variables.java (75%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/execution/WeakInstructionContext.java rename runelite-mixins/src/main/java/net/runelite/mixins/RSEnumMixin.java => deobfuscator/src/main/java/net/runelite/asm/objectwebasm/NonloadingClassWriter.java (50%) rename runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerCompositionMixin.java => deobfuscator/src/main/java/net/runelite/asm/pool/Class.java (67%) rename runescape-api/src/main/java/net/runelite/rs/api/RSSpritePixels.java => deobfuscator/src/main/java/net/runelite/asm/pool/Field.java (53%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/pool/Method.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/signature/Signature.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/signature/util/VirtualMethods.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/visitors/ClassAnnotationVisitor.java rename runescape-api/src/main/java/net/runelite/rs/api/RSSceneTileModel.java => deobfuscator/src/main/java/net/runelite/asm/visitors/ClassFieldVisitor.java (60%) create mode 100644 deobfuscator/src/main/java/net/runelite/asm/visitors/ClassFileVisitor.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/visitors/CodeVisitor.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/visitors/FieldAnnotationVisitor.java create mode 100644 deobfuscator/src/main/java/net/runelite/asm/visitors/MethodAnnotationVisitor.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/Deob.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java rename runescape-api/src/main/java/net/runelite/rs/api/RSBufferProvider.java => deobfuscator/src/main/java/net/runelite/deob/DeobProperties.java (77%) create mode 100644 deobfuscator/src/main/java/net/runelite/deob/Deobfuscator.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/Transformer.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/c2s/IsaacCipherFinder.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/c2s/RWOpcodeFinder.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/clientver/ClientVersion.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/clientver/ClientVersionMain.java rename runescape-api/src/main/java/net/runelite/rs/api/RSItemLayer.java => deobfuscator/src/main/java/net/runelite/deob/clientver/VersionClassVisitor.java (71%) rename runescape-api/src/main/java/net/runelite/rs/api/RSSceneTilePaint.java => deobfuscator/src/main/java/net/runelite/deob/clientver/VersionMethodVisitor.java (73%) create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/CastNull.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/EnumDeobfuscator.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/FieldInliner.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/IllegalStateExceptions.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/Lvt.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/Order.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/PacketHandlerOrder.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/RenameUnique.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/Renamer.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/RuntimeExceptions.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/UnreachedCode.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/UnusedClass.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/UnusedFields.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/UnusedMethods.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/UnusedParameters.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/arithmetic/AssociatedConstant.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/arithmetic/DMath.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/arithmetic/DupDeobfuscator.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/arithmetic/Encryption.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/arithmetic/FieldInfo.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/arithmetic/ModArith.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/arithmetic/MultiplicationDeobfuscator.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/arithmetic/MultiplicationExpression.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/arithmetic/MultiplyOneDeobfuscator.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/arithmetic/MultiplyZeroDeobfuscator.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/arithmetic/Pair.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/cfg/Block.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/cfg/ControlFlowDeobfuscator.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/cfg/ControlFlowGraph.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/constparam/ConstantMethodParameter.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/constparam/ConstantParameter.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/exprargorder/ExprArgOrder.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/exprargorder/Expression.java rename runescape-api/src/main/java/net/runelite/rs/api/RSJagexLoginType.java => deobfuscator/src/main/java/net/runelite/deob/deobfuscators/lvt/LVTType.java (90%) rename runescape-api/src/main/java/net/runelite/rs/api/RSWallObject.java => deobfuscator/src/main/java/net/runelite/deob/deobfuscators/lvt/MapKey.java (66%) create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/lvt/Mappings.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/AnnotationIntegrityChecker.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/AnnotationMapper.java rename runescape-api/src/main/java/net/runelite/rs/api/RSNPCComposition.java => deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/ClassGroupMapper.java (62%) create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/ClassMapper.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/ConstructorMapper.java rename runelite-mixins/src/main/java/net/runelite/mixins/RSHashTableMixin.java => deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/ExecutionMapper.java (64%) create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/Mapper.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/Mapping.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/MappingExecutorUtil.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/MethodSignatureMapper.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/ParallelExecutorMapping.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/StaticInitializerIndexer.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/StaticMethodSignatureMapper.java rename runelite-mixins/src/main/java/net/runelite/mixins/RSGroundObjectMixin.java => deobfuscator/src/main/java/net/runelite/deob/deobfuscators/menuaction/Comparison.java (56%) create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/menuaction/MenuActionDeobfuscator.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/packethandler/PacketLengthFinder.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/packethandler/PacketRead.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/packethandler/PacketTypeFinder.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/packetwrite/OpcodeReplacer.java rename runescape-api/src/main/java/net/runelite/rs/api/RSDecorativeObject.java => deobfuscator/src/main/java/net/runelite/deob/deobfuscators/packetwrite/PacketWrite.java (64%) create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/packetwrite/PacketWriteDeobfuscator.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/ClientErrorTransformer.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/GetPathTransformer.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/MaxMemoryTransformer.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/OpcodesTransformer.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/ReflectionTransformer.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/RuneliteBufferTransformer.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/buffer/BufferFinder.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/buffer/BufferMethodInjector.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/buffer/BufferPayloadFinder.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/buffer/PacketFlushFinder.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/buffer/RuneliteBuffer.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/s2c/HandlerFinder.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/s2c/PacketHandler.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/s2c/PacketHandlers.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/updater/AnnotationCopier.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/updater/AnnotationRenamer.java rename runescape-api/src/main/java/net/runelite/rs/api/RSChatPlayer.java => deobfuscator/src/main/java/net/runelite/deob/updater/ParameterRenamer.java (61%) create mode 100644 deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/util/IdGen.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/util/JarUtil.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/util/NameMappings.java create mode 100644 deobfuscator/src/main/java/net/runelite/deob/util/PrimitiveUtils.java delete mode 100644 extended-mixin-processor/.gitignore delete mode 100644 extended-mixin-processor/pom.xml delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/MethodGarbageValue.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/MixinProcessorMojo.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/annotations/Append.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/annotations/Inject.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/annotations/Overwrite.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/annotations/Prepend.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/annotations/Provided.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/annotations/Reobfuscate.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/enums/InjectionType.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/generators/AnnotationProcessor.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/generators/PatchGenerator.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/generators/StaticGenerator.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/generators/StaticStageTwoGenerator.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/parsers/FieldAnnotationParser.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/parsers/GamepackDownloader.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/parsers/HooksParser.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/parsers/MethodAnnotationParser.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/parsers/MethodReflector.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/transformers/AnnotationRemoverTransformer.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/transformers/AsmBaseTransformer.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/transformers/AsmMethodGarbageTransformer.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/transformers/AsmMethodSignatureTransformer.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/transformers/AsmNameTransformer.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/transformers/AsmStaticUsageTransformer.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/transformers/DoNothingTransformer.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/transformers/GetFieldDecoderTransformer.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/transformers/ProvidedRemoverTransformer.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/util/JavassistUtils.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/util/RefUtils.java delete mode 100644 extended-mixin-processor/src/main/java/us/runelitepl/mixinprocessor/util/WebUtils.java delete mode 100644 extended-mixin-processor/src/main/resources/mixin-processor-license.txt delete mode 100644 extended-mixins/gamepack.deob.jar.op.json delete mode 100644 extended-mixins/hooks.json delete mode 100644 extended-mixins/pom.xml delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixinprocessor/annotations/Append.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixinprocessor/annotations/Inject.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixinprocessor/annotations/Overwrite.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixinprocessor/annotations/Prepend.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixinprocessor/annotations/Provided.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixinprocessor/annotations/Reobfuscate.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixins/Actor.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixins/Client.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixins/MouseRecorder.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixins/Player.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixins/Projectile.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixins/Scene.java delete mode 100644 extended-mixins/src/main/java/us/runelitepl/mixins/_Statics_.java delete mode 100644 extended-mixins/src/main/resources/extended-mixins-license.txt create mode 100644 injected-client/pom.xml create mode 100644 injector-plugin/pom.xml create mode 100644 injector-plugin/src/main/java/net/runelite/injector/Inject.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/InjectConstruct.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/InjectGetter.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/InjectHook.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/InjectHookMethod.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/InjectInvoker.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/InjectMojo.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/InjectSetter.java rename runescape-api/src/main/java/net/runelite/rs/api/RSMapElementConfig.java => injector-plugin/src/main/java/net/runelite/injector/InjectionException.java (81%) create mode 100644 injector-plugin/src/main/java/net/runelite/injector/Injector.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/InjectorValidator.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/MixinInjector.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/raw/ClearColorBuffer.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/raw/DrawAfterWidgets.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/raw/RasterizerHook.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/raw/RenderDraw.java create mode 100644 injector-plugin/src/main/java/net/runelite/injector/raw/ScriptVM.java rename runelite-api/src/main/java/net/runelite/api/{EnumComposition.java => EnumDefinition.java} (97%) rename runelite-api/src/main/java/net/runelite/api/{GameEngine.java => GameShell.java} (94%) rename runelite-api/src/main/java/net/runelite/api/{ItemComposition.java => ItemDefinition.java} (64%) delete mode 100644 runelite-api/src/main/java/net/runelite/api/NPCComposition.java create mode 100644 runelite-api/src/main/java/net/runelite/api/NPCDefinition.java rename runelite-api/src/main/java/net/runelite/api/{ObjectComposition.java => ObjectDefinition.java} (97%) rename runelite-api/src/main/java/net/runelite/api/{PlayerComposition.java => PlayerAppearance.java} (94%) rename runelite-api/src/main/java/net/runelite/api/{SpritePixels.java => Sprite.java} (93%) create mode 100644 runelite-api/src/main/java/net/runelite/api/config/Constants.java rename runelite-api/src/main/java/net/runelite/api/events/{PostItemComposition.java => PostItemDefinition.java} (89%) create mode 100644 runelite-api/src/main/java/net/runelite/api/events/SpotAnimationChanged.java rename runescape-api/src/main/java/net/runelite/rs/api/RSMainBufferProvider.java => runelite-api/src/main/java/net/runelite/mapping/Construct.java (70%) create mode 100644 runelite-api/src/main/java/net/runelite/mapping/Export.java rename runescape-api/src/main/java/net/runelite/rs/api/RSGroundObject.java => runelite-api/src/main/java/net/runelite/mapping/Hook.java (77%) rename runescape-api/src/main/java/net/runelite/rs/api/RSCollisionData.java => runelite-api/src/main/java/net/runelite/mapping/Implements.java (82%) create mode 100644 runelite-api/src/main/java/net/runelite/mapping/Import.java create mode 100644 runelite-api/src/main/java/net/runelite/mapping/ObfuscatedGetter.java create mode 100644 runelite-api/src/main/java/net/runelite/mapping/ObfuscatedName.java rename runescape-api/src/main/java/net/runelite/rs/api/RSPlayerComposition.java => runelite-api/src/main/java/net/runelite/mapping/ObfuscatedSignature.java (74%) rename runescape-api/src/main/java/net/runelite/rs/api/RSPreferences.java => runelite-api/src/main/java/net/runelite/mapping/Protect.java (75%) delete mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridConfig.java delete mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridOverlay.java delete mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridPlugin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/GraphicsObjectMixin.java rename runelite-mixins/src/main/java/net/runelite/mixins/{RSIndexDataBaseMixin.java => RSAbstractIndexCacheMixin.java} (59%) create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSBoundaryObjectMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSCanvasMixin.java rename runelite-mixins/src/main/java/net/runelite/mixins/{RSChatLineBufferMixin.java => RSChatChannelMixin.java} (89%) create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSClanChatMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSClanMateMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSClanMemberManagerMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSEnumDefinitionMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSFloorDecorationMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSFriendManagerMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSFriendSystemMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSGameCanvasMixin.java rename runelite-mixins/src/main/java/net/runelite/mixins/{RSGameEngineMixin.java => RSGameShellMixin.java} (93%) create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSGraphicsObjectMixin.java rename runelite-mixins/src/main/java/net/runelite/mixins/{RSItemMixin.java => RSGroundItemMixin.java} (52%) create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSGroundItemPileMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSHealthBarDefinitionMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSHealthBarMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSIgnoredMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSItemCompositionMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSItemDefinitionMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSKeyFocusListenerMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSKeyHandlerMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSMessageMixin.java rename runelite-mixins/src/main/java/net/runelite/mixins/{RSMouseInputMixin.java => RSMouseHandlerMixin.java} (67%) create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSNPCDefinitionMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSNameableContainerMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSNameableMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSNodeHashTableMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSNpcCompositionMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerAppearanceMixin.java rename runelite-mixins/src/main/java/net/runelite/mixins/{RSMainBufferProviderMixin.java => RSRasterProviderMixin.java} (54%) rename runelite-mixins/src/main/java/net/runelite/mixins/{Rasterizer2DMixin.java => RSRasterizer2DMixin.java} (78%) delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSSceneTileModelMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSSceneTilePaintMixin.java rename runelite-mixins/src/main/java/net/runelite/mixins/{RSSequenceMixin.java => RSSequenceDefinitionMixin.java} (72%) rename runelite-mixins/src/main/java/net/runelite/mixins/{RSSpritePixelsMixin.java => RSSpriteMixin.java} (58%) create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSTileModelMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSTileObjectMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSTilePaintMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSUserListMixin.java rename runelite-mixins/src/main/java/net/runelite/mixins/{RSDecorativeObjectMixin.java => RSWallDecorationMixin.java} (57%) delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSWallObjectMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSWorldMapManagerMixin.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSWorldMapMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/TileObjectMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/WorldMapManagerMixin.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/WorldMapMixin.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSAbstractFont.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSAbstractIndexCache.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSAbstractRasterProvider.java rename runescape-api/src/main/java/net/runelite/rs/api/{RSFrame.java => RSAnimation.java} (88%) create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSBoundaryObject.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSBuddy.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSCanvas.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSChatChannel.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSChatLineBuffer.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSClanChat.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSClanMate.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSClanMemberManager.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSClientPreferences.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSCollisionMap.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfoList.java rename runescape-api/src/main/java/net/runelite/rs/api/{RSCacheableNode.java => RSDualNode.java} (95%) rename runescape-api/src/main/java/net/runelite/rs/api/{RSRenderable.java => RSEntity.java} (93%) delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSEnum.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSEnumDefinition.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSEvictingDualNodeHashTable.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSFloorDecoration.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSFontTypeFace.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSFriendContainer.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSFriendManager.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSFriendSystem.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSFriendsList.java rename runescape-api/src/main/java/net/runelite/rs/api/{RSGameEngine.java => RSGameShell.java} (92%) create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSGroundItem.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSGroundItemPile.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSHealthBarDefinition.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSHealthBarUpdate.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSIgnore.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSIgnoreContainer.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSIgnoreList.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSIgnored.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSIndexCache.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSIndexData.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSIndexDataBase.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSItemComposition.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSItemDefinition.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSIterableHashTable.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSIterableNodeDeque.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSIterableNodeHashTable.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSKeyFocusListener.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSKeyHandler.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSLoginType.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSMessage.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSMouseHandler.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSMouseInput.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSNPCDefinition.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSNameable.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSNameableContainer.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSNodeCache.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSNodeDeque.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSNodeHashTable.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSObjectDefinition.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSPlayerAppearance.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSRasterProvider.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSReflectionCheck.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSRenderOverview.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSSequence.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSSequenceDefinition.java rename runescape-api/src/main/java/net/runelite/rs/api/{RSFrameMap.java => RSSkeleton.java} (94%) create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSTileModel.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSTilePaint.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSUser.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSUserList.java rename runescape-api/src/main/java/net/runelite/rs/api/{RSName.java => RSUsername.java} (95%) delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSVarbit.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSVarbitDefinition.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSWallDecoration.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSWidgetGroupParent.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSWidgetNode.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSWorldMap.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSWorldMapArea.java delete mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSWorldMapData.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSWorldMapElement.java create mode 100644 runescape-client/pom.xml create mode 100644 runescape-client/src/main/java/AbstractByteArrayCopier.java create mode 100644 runescape-client/src/main/java/AbstractFont.java create mode 100644 runescape-client/src/main/java/AbstractIndexCache.java create mode 100644 runescape-client/src/main/java/AbstractRasterProvider.java create mode 100644 runescape-client/src/main/java/AbstractSocket.java create mode 100644 runescape-client/src/main/java/AbstractSound.java create mode 100644 runescape-client/src/main/java/AbstractUserComparator.java create mode 100644 runescape-client/src/main/java/AbstractWorldMapIcon.java create mode 100644 runescape-client/src/main/java/AccessFile.java create mode 100644 runescape-client/src/main/java/Actor.java create mode 100644 runescape-client/src/main/java/Animation.java create mode 100644 runescape-client/src/main/java/AttackOption.java create mode 100644 runescape-client/src/main/java/AudioFilter.java create mode 100644 runescape-client/src/main/java/BoundaryObject.java create mode 100644 runescape-client/src/main/java/Bounds.java create mode 100644 runescape-client/src/main/java/Buddy.java create mode 100644 runescape-client/src/main/java/Buffer.java create mode 100644 runescape-client/src/main/java/BufferedFile.java create mode 100644 runescape-client/src/main/java/BufferedNetSocket.java create mode 100644 runescape-client/src/main/java/BufferedSink.java create mode 100644 runescape-client/src/main/java/BufferedSource.java create mode 100644 runescape-client/src/main/java/ByteArrayNode.java create mode 100644 runescape-client/src/main/java/ByteArrayPool.java create mode 100644 runescape-client/src/main/java/Bzip2Decompressor.java create mode 100644 runescape-client/src/main/java/Bzip2State.java create mode 100644 runescape-client/src/main/java/Canvas.java create mode 100644 runescape-client/src/main/java/ChatChannel.java create mode 100644 runescape-client/src/main/java/ClanChat.java create mode 100644 runescape-client/src/main/java/ClanMate.java create mode 100644 runescape-client/src/main/java/Client.java create mode 100644 runescape-client/src/main/java/ClientPacket.java create mode 100644 runescape-client/src/main/java/ClientPacketMarker.java create mode 100644 runescape-client/src/main/java/ClientParameter.java create mode 100644 runescape-client/src/main/java/ClientPreferences.java create mode 100644 runescape-client/src/main/java/Clock.java create mode 100644 runescape-client/src/main/java/CollisionMap.java create mode 100644 runescape-client/src/main/java/Decimator.java create mode 100644 runescape-client/src/main/java/DemotingHashTable.java create mode 100644 runescape-client/src/main/java/DesktopPlatformInfoProvider.java create mode 100644 runescape-client/src/main/java/DevicePcmPlayer.java create mode 100644 runescape-client/src/main/java/DevicePcmPlayerProvider.java create mode 100644 runescape-client/src/main/java/DirectByteArrayCopier.java create mode 100644 runescape-client/src/main/java/DirectWrapper.java create mode 100644 runescape-client/src/main/java/DualNode.java create mode 100644 runescape-client/src/main/java/DualNodeDeque.java create mode 100644 runescape-client/src/main/java/DynamicObject.java create mode 100644 runescape-client/src/main/java/Entity.java create mode 100644 runescape-client/src/main/java/EnumDefinition.java create mode 100644 runescape-client/src/main/java/Enumerated.java create mode 100644 runescape-client/src/main/java/EvictingDualNodeHashTable.java create mode 100644 runescape-client/src/main/java/FaceNormal.java create mode 100644 runescape-client/src/main/java/FloorDecoration.java create mode 100644 runescape-client/src/main/java/Font.java create mode 100644 runescape-client/src/main/java/FontName.java create mode 100644 runescape-client/src/main/java/Fonts.java create mode 100644 runescape-client/src/main/java/Formatting.java create mode 100644 runescape-client/src/main/java/Frames.java create mode 100644 runescape-client/src/main/java/Friend.java create mode 100644 runescape-client/src/main/java/FriendLoginUpdate.java create mode 100644 runescape-client/src/main/java/FriendSystem.java create mode 100644 runescape-client/src/main/java/FriendsList.java create mode 100644 runescape-client/src/main/java/GameObject.java create mode 100644 runescape-client/src/main/java/GameShell.java create mode 100644 runescape-client/src/main/java/GrandExchangeEvent.java create mode 100644 runescape-client/src/main/java/GrandExchangeEvents.java create mode 100644 runescape-client/src/main/java/GrandExchangeOffer.java create mode 100644 runescape-client/src/main/java/GraphicsObject.java create mode 100644 runescape-client/src/main/java/GroundItem.java create mode 100644 runescape-client/src/main/java/GroundItemPile.java create mode 100644 runescape-client/src/main/java/GzipDecompressor.java create mode 100644 runescape-client/src/main/java/HealthBar.java create mode 100644 runescape-client/src/main/java/HealthBarDefinition.java create mode 100644 runescape-client/src/main/java/HealthBarUpdate.java create mode 100644 runescape-client/src/main/java/HitSplatDefinition.java create mode 100644 runescape-client/src/main/java/Huffman.java create mode 100644 runescape-client/src/main/java/IgnoreList.java create mode 100644 runescape-client/src/main/java/Ignored.java create mode 100644 runescape-client/src/main/java/IndexCache.java create mode 100644 runescape-client/src/main/java/IndexCacheLoader.java create mode 100644 runescape-client/src/main/java/IndexStore.java create mode 100644 runescape-client/src/main/java/IndexStoreAction.java create mode 100644 runescape-client/src/main/java/IndexStoreActionHandler.java create mode 100644 runescape-client/src/main/java/IndexedSprite.java create mode 100644 runescape-client/src/main/java/Instrument.java create mode 100644 runescape-client/src/main/java/IntHashTable.java create mode 100644 runescape-client/src/main/java/IntegerNode.java create mode 100644 runescape-client/src/main/java/Interpreter.java create mode 100644 runescape-client/src/main/java/InvDefinition.java create mode 100644 runescape-client/src/main/java/IsaacCipher.java create mode 100644 runescape-client/src/main/java/ItemContainer.java create mode 100644 runescape-client/src/main/java/ItemDefinition.java create mode 100644 runescape-client/src/main/java/IterableDualNodeQueue.java create mode 100644 runescape-client/src/main/java/IterableDualNodeQueueIterator.java create mode 100644 runescape-client/src/main/java/IterableNodeDeque.java create mode 100644 runescape-client/src/main/java/IterableNodeDequeDescendingIterator.java create mode 100644 runescape-client/src/main/java/IterableNodeHashTable.java create mode 100644 runescape-client/src/main/java/IterableNodeHashTableIterator.java create mode 100644 runescape-client/src/main/java/KeyHandler.java create mode 100644 runescape-client/src/main/java/KitDefinition.java create mode 100644 runescape-client/src/main/java/Link.java create mode 100644 runescape-client/src/main/java/LinkDeque.java create mode 100644 runescape-client/src/main/java/Login.java create mode 100644 runescape-client/src/main/java/LoginPacket.java create mode 100644 runescape-client/src/main/java/LoginType.java create mode 100644 runescape-client/src/main/java/MenuAction.java create mode 100644 runescape-client/src/main/java/Message.java create mode 100644 runescape-client/src/main/java/Messages.java create mode 100644 runescape-client/src/main/java/MidiFileReader.java create mode 100644 runescape-client/src/main/java/MidiPcmStream.java create mode 100644 runescape-client/src/main/java/MilliClock.java create mode 100644 runescape-client/src/main/java/Model.java create mode 100644 runescape-client/src/main/java/ModelData.java create mode 100644 runescape-client/src/main/java/ModelData0.java create mode 100644 runescape-client/src/main/java/MouseHandler.java create mode 100644 runescape-client/src/main/java/MouseRecorder.java create mode 100644 runescape-client/src/main/java/MouseWheel.java create mode 100644 runescape-client/src/main/java/MouseWheelHandler.java create mode 100644 runescape-client/src/main/java/MusicPatch.java create mode 100644 runescape-client/src/main/java/MusicPatchNode.java create mode 100644 runescape-client/src/main/java/MusicPatchNode2.java create mode 100644 runescape-client/src/main/java/MusicPatchPcmStream.java create mode 100644 runescape-client/src/main/java/MusicSample.java create mode 100644 runescape-client/src/main/java/MusicTrack.java create mode 100644 runescape-client/src/main/java/NanoClock.java create mode 100644 runescape-client/src/main/java/NetCache.java create mode 100644 runescape-client/src/main/java/NetFileRequest.java create mode 100644 runescape-client/src/main/java/NetSocket.java create mode 100644 runescape-client/src/main/java/Node.java create mode 100644 runescape-client/src/main/java/NodeDeque.java create mode 100644 runescape-client/src/main/java/NodeHashTable.java create mode 100644 runescape-client/src/main/java/Npc.java create mode 100644 runescape-client/src/main/java/NpcDefinition.java create mode 100644 runescape-client/src/main/java/ObjectDefinition.java create mode 100644 runescape-client/src/main/java/ObjectNode.java create mode 100644 runescape-client/src/main/java/ObjectSound.java create mode 100644 runescape-client/src/main/java/Occluder.java create mode 100644 runescape-client/src/main/java/OverlayDefinition.java create mode 100644 runescape-client/src/main/java/OwnWorldComparator.java create mode 100644 runescape-client/src/main/java/PacketBuffer.java create mode 100644 runescape-client/src/main/java/PacketBufferNode.java create mode 100644 runescape-client/src/main/java/PacketWriter.java create mode 100644 runescape-client/src/main/java/ParamKeyDefinition.java create mode 100644 runescape-client/src/main/java/PcmPlayer.java create mode 100644 runescape-client/src/main/java/PcmPlayerProvider.java create mode 100644 runescape-client/src/main/java/PcmStream.java create mode 100644 runescape-client/src/main/java/PcmStreamMixer.java create mode 100644 runescape-client/src/main/java/PcmStreamMixerListener.java create mode 100644 runescape-client/src/main/java/PlatformInfo.java create mode 100644 runescape-client/src/main/java/PlatformInfoProvider.java create mode 100644 runescape-client/src/main/java/Player.java create mode 100644 runescape-client/src/main/java/PlayerAppearance.java create mode 100644 runescape-client/src/main/java/PlayerType.java create mode 100644 runescape-client/src/main/java/Players.java create mode 100644 runescape-client/src/main/java/Projectile.java create mode 100644 runescape-client/src/main/java/RasterProvider.java create mode 100644 runescape-client/src/main/java/Rasterizer2D.java create mode 100644 runescape-client/src/main/java/Rasterizer3D.java create mode 100644 runescape-client/src/main/java/RawPcmStream.java create mode 100644 runescape-client/src/main/java/RawSound.java create mode 100644 runescape-client/src/main/java/RectangleMode.java create mode 100644 runescape-client/src/main/java/ReflectionCheck.java create mode 100644 runescape-client/src/main/java/RunException.java create mode 100644 runescape-client/src/main/java/Scene.java create mode 100644 runescape-client/src/main/java/Script.java create mode 100644 runescape-client/src/main/java/ScriptEvent.java create mode 100644 runescape-client/src/main/java/ScriptFrame.java create mode 100644 runescape-client/src/main/java/SecureRandomCallable.java create mode 100644 runescape-client/src/main/java/SecureRandomFuture.java create mode 100644 runescape-client/src/main/java/SequenceDefinition.java create mode 100644 runescape-client/src/main/java/ServerBuild.java create mode 100644 runescape-client/src/main/java/ServerPacket.java create mode 100644 runescape-client/src/main/java/Skeleton.java create mode 100644 runescape-client/src/main/java/Skills.java create mode 100644 runescape-client/src/main/java/SoftWrapper.java create mode 100644 runescape-client/src/main/java/SoundCache.java create mode 100644 runescape-client/src/main/java/SoundEffect.java create mode 100644 runescape-client/src/main/java/SoundEnvelope.java create mode 100644 runescape-client/src/main/java/SoundSystem.java create mode 100644 runescape-client/src/main/java/SpotAnimationDefinition.java create mode 100644 runescape-client/src/main/java/Sprite.java create mode 100644 runescape-client/src/main/java/SpriteIds.java create mode 100644 runescape-client/src/main/java/SpriteMask.java create mode 100644 runescape-client/src/main/java/Strings.java create mode 100644 runescape-client/src/main/java/StructDefinition.java create mode 100644 runescape-client/src/main/java/StudioGame.java create mode 100644 runescape-client/src/main/java/Task.java create mode 100644 runescape-client/src/main/java/TaskHandler.java create mode 100644 runescape-client/src/main/java/Texture.java create mode 100644 runescape-client/src/main/java/TextureLoader.java create mode 100644 runescape-client/src/main/java/TextureProvider.java create mode 100644 runescape-client/src/main/java/Tile.java create mode 100644 runescape-client/src/main/java/TileLocation.java create mode 100644 runescape-client/src/main/java/TileModel.java create mode 100644 runescape-client/src/main/java/TilePaint.java create mode 100644 runescape-client/src/main/java/Tiles.java create mode 100644 runescape-client/src/main/java/Timer.java create mode 100644 runescape-client/src/main/java/TotalQuantityComparator.java create mode 100644 runescape-client/src/main/java/TriBool.java create mode 100644 runescape-client/src/main/java/UnderlayDefinition.java create mode 100644 runescape-client/src/main/java/UnitPriceComparator.java create mode 100644 runescape-client/src/main/java/UrlRequest.java create mode 100644 runescape-client/src/main/java/UrlRequester.java create mode 100644 runescape-client/src/main/java/User.java create mode 100644 runescape-client/src/main/java/UserComparator1.java create mode 100644 runescape-client/src/main/java/UserComparator10.java create mode 100644 runescape-client/src/main/java/UserComparator2.java create mode 100644 runescape-client/src/main/java/UserComparator3.java create mode 100644 runescape-client/src/main/java/UserComparator4.java create mode 100644 runescape-client/src/main/java/UserComparator5.java create mode 100644 runescape-client/src/main/java/UserComparator6.java create mode 100644 runescape-client/src/main/java/UserComparator7.java create mode 100644 runescape-client/src/main/java/UserComparator8.java create mode 100644 runescape-client/src/main/java/UserComparator9.java create mode 100644 runescape-client/src/main/java/UserList.java create mode 100644 runescape-client/src/main/java/Username.java create mode 100644 runescape-client/src/main/java/Usernamed.java create mode 100644 runescape-client/src/main/java/VarbitDefinition.java create mode 100644 runescape-client/src/main/java/VarcInt.java create mode 100644 runescape-client/src/main/java/Varcs.java create mode 100644 runescape-client/src/main/java/VarpDefinition.java create mode 100644 runescape-client/src/main/java/Varps.java create mode 100644 runescape-client/src/main/java/VertexNormal.java create mode 100644 runescape-client/src/main/java/ViewportMouse.java create mode 100644 runescape-client/src/main/java/WallDecoration.java create mode 100644 runescape-client/src/main/java/Widget.java create mode 100644 runescape-client/src/main/java/WidgetGroupParent.java create mode 100644 runescape-client/src/main/java/World.java create mode 100644 runescape-client/src/main/java/WorldComparator.java create mode 100644 runescape-client/src/main/java/WorldMap.java create mode 100644 runescape-client/src/main/java/WorldMapArea.java create mode 100644 runescape-client/src/main/java/WorldMapAreaData.java create mode 100644 runescape-client/src/main/java/WorldMapCacheName.java create mode 100644 runescape-client/src/main/java/WorldMapElement.java create mode 100644 runescape-client/src/main/java/WorldMapEvent.java create mode 100644 runescape-client/src/main/java/WorldMapIcon1.java create mode 100644 runescape-client/src/main/java/WorldMapIcon2.java create mode 100644 runescape-client/src/main/java/WorldMapIndexCacheLoader.java create mode 100644 runescape-client/src/main/java/WorldMapLabel.java create mode 100644 runescape-client/src/main/java/WorldMapLabelSize.java create mode 100644 runescape-client/src/main/java/WorldMapManager.java create mode 100644 runescape-client/src/main/java/WorldMapRegion.java create mode 100644 runescape-client/src/main/java/WorldMapSection.java create mode 100644 runescape-client/src/main/java/WorldMapSection0.java create mode 100644 runescape-client/src/main/java/WorldMapSection1.java create mode 100644 runescape-client/src/main/java/WorldMapSection2.java create mode 100644 runescape-client/src/main/java/WorldMapSection3.java create mode 100644 runescape-client/src/main/java/WorldMapSectionType.java create mode 100644 runescape-client/src/main/java/Wrapper.java create mode 100644 runescape-client/src/main/java/class0.java create mode 100644 runescape-client/src/main/java/class1.java create mode 100644 runescape-client/src/main/java/class102.java create mode 100644 runescape-client/src/main/java/class109.java create mode 100644 runescape-client/src/main/java/class11.java create mode 100644 runescape-client/src/main/java/class114.java create mode 100644 runescape-client/src/main/java/class12.java create mode 100644 runescape-client/src/main/java/class13.java create mode 100644 runescape-client/src/main/java/class14.java create mode 100644 runescape-client/src/main/java/class15.java create mode 100644 runescape-client/src/main/java/class157.java create mode 100644 runescape-client/src/main/java/class159.java create mode 100644 runescape-client/src/main/java/class16.java create mode 100644 runescape-client/src/main/java/class160.java create mode 100644 runescape-client/src/main/java/class161.java create mode 100644 runescape-client/src/main/java/class168.java create mode 100644 runescape-client/src/main/java/class171.java create mode 100644 runescape-client/src/main/java/class178.java create mode 100644 runescape-client/src/main/java/class179.java create mode 100644 runescape-client/src/main/java/class190.java create mode 100644 runescape-client/src/main/java/class192.java create mode 100644 runescape-client/src/main/java/class196.java create mode 100644 runescape-client/src/main/java/class197.java create mode 100644 runescape-client/src/main/java/class198.java create mode 100644 runescape-client/src/main/java/class2.java create mode 100644 runescape-client/src/main/java/class203.java create mode 100644 runescape-client/src/main/java/class204.java create mode 100644 runescape-client/src/main/java/class206.java create mode 100644 runescape-client/src/main/java/class21.java create mode 100644 runescape-client/src/main/java/class210.java create mode 100644 runescape-client/src/main/java/class211.java create mode 100644 runescape-client/src/main/java/class212.java create mode 100644 runescape-client/src/main/java/class214.java create mode 100644 runescape-client/src/main/java/class22.java create mode 100644 runescape-client/src/main/java/class226.java create mode 100644 runescape-client/src/main/java/class227.java create mode 100644 runescape-client/src/main/java/class229.java create mode 100644 runescape-client/src/main/java/class230.java create mode 100644 runescape-client/src/main/java/class231.java create mode 100644 runescape-client/src/main/java/class233.java create mode 100644 runescape-client/src/main/java/class234.java create mode 100644 runescape-client/src/main/java/class236.java create mode 100644 runescape-client/src/main/java/class237.java create mode 100644 runescape-client/src/main/java/class238.java create mode 100644 runescape-client/src/main/java/class248.java create mode 100644 runescape-client/src/main/java/class249.java create mode 100644 runescape-client/src/main/java/class25.java create mode 100644 runescape-client/src/main/java/class258.java create mode 100644 runescape-client/src/main/java/class266.java create mode 100644 runescape-client/src/main/java/class27.java create mode 100644 runescape-client/src/main/java/class277.java create mode 100644 runescape-client/src/main/java/class279.java create mode 100644 runescape-client/src/main/java/class3.java create mode 100644 runescape-client/src/main/java/class30.java create mode 100644 runescape-client/src/main/java/class303.java create mode 100644 runescape-client/src/main/java/class304.java create mode 100644 runescape-client/src/main/java/class305.java create mode 100644 runescape-client/src/main/java/class306.java create mode 100644 runescape-client/src/main/java/class307.java create mode 100644 runescape-client/src/main/java/class308.java create mode 100644 runescape-client/src/main/java/class309.java create mode 100644 runescape-client/src/main/java/class31.java create mode 100644 runescape-client/src/main/java/class310.java create mode 100644 runescape-client/src/main/java/class311.java create mode 100644 runescape-client/src/main/java/class313.java create mode 100644 runescape-client/src/main/java/class32.java create mode 100644 runescape-client/src/main/java/class322.java create mode 100644 runescape-client/src/main/java/class328.java create mode 100644 runescape-client/src/main/java/class337.java create mode 100644 runescape-client/src/main/java/class39.java create mode 100644 runescape-client/src/main/java/class4.java create mode 100644 runescape-client/src/main/java/class40.java create mode 100644 runescape-client/src/main/java/class46.java create mode 100644 runescape-client/src/main/java/class48.java create mode 100644 runescape-client/src/main/java/class50.java create mode 100644 runescape-client/src/main/java/class54.java create mode 100644 runescape-client/src/main/java/class60.java create mode 100644 runescape-client/src/main/java/class65.java create mode 100644 runescape-client/src/main/java/class68.java create mode 100644 runescape-client/src/main/java/class72.java create mode 100644 runescape-client/src/main/java/class80.java create mode 100644 runescape-client/src/main/java/class83.java create mode 100644 runescape-client/src/main/java/class98.java create mode 100644 runescape-client/src/main/java/net/runelite/rs/Opcodes.java create mode 100644 runescape-client/src/main/java/net/runelite/rs/Reflection.java diff --git a/cache/src/main/java/net/runelite/cache/item/ItemSpriteFactory.java b/cache/src/main/java/net/runelite/cache/item/ItemSpriteFactory.java index c93edf3611..5d6f340508 100644 --- a/cache/src/main/java/net/runelite/cache/item/ItemSpriteFactory.java +++ b/cache/src/main/java/net/runelite/cache/item/ItemSpriteFactory.java @@ -38,19 +38,19 @@ import net.runelite.cache.models.VertexNormal; public class ItemSpriteFactory { public static final BufferedImage createSprite(ItemProvider itemProvider, ModelProvider modelProvider, - SpriteProvider spriteProvider, TextureProvider textureProvider, - int itemId, int quantity, int border, int shadowColor, - boolean noted) throws IOException + SpriteProvider spriteProvider, TextureProvider textureProvider, + int itemId, int quantity, int border, int shadowColor, + boolean noted) throws IOException { - SpritePixels spritePixels = createSpritePixels(itemProvider, modelProvider, spriteProvider, textureProvider, - itemId, quantity, border, shadowColor, noted); + Sprite spritePixels = createSpritePixels(itemProvider, modelProvider, spriteProvider, textureProvider, + itemId, quantity, border, shadowColor, noted); return spritePixels == null ? null : spritePixels.toBufferedImage(); } - private static final SpritePixels createSpritePixels(ItemProvider itemProvider, ModelProvider modelProvider, - SpriteProvider spriteProvider, TextureProvider textureProvider, - int itemId, int quantity, int border, int shadowColor, - boolean noted) throws IOException + private static final Sprite createSpritePixels(ItemProvider itemProvider, ModelProvider modelProvider, + SpriteProvider spriteProvider, TextureProvider textureProvider, + int itemId, int quantity, int border, int shadowColor, + boolean noted) throws IOException { ItemDefinition item = itemProvider.provide(itemId); @@ -83,11 +83,11 @@ public class ItemSpriteFactory return null; } - SpritePixels auxSpritePixels = null; + Sprite auxSpritePixels = null; if (item.notedTemplate != -1) { auxSpritePixels = createSpritePixels(itemProvider, modelProvider, spriteProvider, textureProvider, - item.notedID, 10, 1, 0, true); + item.notedID, 10, 1, 0, true); if (auxSpritePixels == null) { return null; @@ -96,7 +96,7 @@ public class ItemSpriteFactory else if (item.boughtTemplateId != -1) { auxSpritePixels = createSpritePixels(itemProvider, modelProvider, spriteProvider, textureProvider, - item.boughtId, quantity, border, shadowColor, false); + item.boughtId, quantity, border, shadowColor, false); if (auxSpritePixels == null) { return null; @@ -105,7 +105,7 @@ public class ItemSpriteFactory else if (item.placeholderTemplateId != -1) { auxSpritePixels = createSpritePixels(itemProvider, modelProvider, spriteProvider, textureProvider, - item.placeholderId, quantity, 0, 0, false); + item.placeholderId, quantity, 0, 0, false); if (auxSpritePixels == null) { return null; @@ -114,7 +114,7 @@ public class ItemSpriteFactory RSTextureProvider rsTextureProvider = new RSTextureProvider(textureProvider, spriteProvider); - SpritePixels spritePixels = new SpritePixels(36, 32); + Sprite spritePixels = new Sprite(36, 32); Graphics3D graphics = new Graphics3D(rsTextureProvider); graphics.setBrightness(0.6d); graphics.setRasterBuffer(spritePixels.pixels, 36, 32); @@ -142,12 +142,12 @@ public class ItemSpriteFactory itemModel.calculateBoundsCylinder(); itemModel.rotateAndProject(graphics, 0, - item.yan2d, - item.zan2d, - item.xan2d, - item.xOffset2d, - itemModel.modelHeight / 2 + var17 + item.yOffset2d, - var18 + item.yOffset2d); + item.yan2d, + item.zan2d, + item.xan2d, + item.xOffset2d, + itemModel.modelHeight / 2 + var17 + item.yOffset2d, + var18 + item.yOffset2d); if (item.boughtTemplateId != -1) { auxSpritePixels.drawAtOn(graphics, 0, 0); @@ -175,8 +175,8 @@ public class ItemSpriteFactory } graphics.setRasterBuffer(graphics.graphicsPixels, - graphics.graphicsPixelsWidth, - graphics.graphicsPixelsHeight); + graphics.graphicsPixelsWidth, + graphics.graphicsPixelsHeight); graphics.setRasterClipping(); graphics.rasterGouraudLowRes = true; diff --git a/cache/src/main/java/net/runelite/cache/item/SpritePixels.java b/cache/src/main/java/net/runelite/cache/item/SpritePixels.java index 02079847f7..ed8be85a18 100644 --- a/cache/src/main/java/net/runelite/cache/item/SpritePixels.java +++ b/cache/src/main/java/net/runelite/cache/item/SpritePixels.java @@ -26,7 +26,7 @@ package net.runelite.cache.item; import java.awt.image.BufferedImage; -class SpritePixels +class Sprite { public int[] pixels; public int width; @@ -34,7 +34,7 @@ class SpritePixels public int offsetX; int offsetY; - public SpritePixels(int[] var1, int var2, int var3) + public Sprite(int[] var1, int var2, int var3) { this.pixels = var1; this.width = var2; @@ -43,7 +43,7 @@ class SpritePixels this.offsetX = 0; } - public SpritePixels(int var1, int var2) + public Sprite(int var1, int var2) { this(new int[var2 * var1], var1, var2); } diff --git a/deobfuscator/pom.xml b/deobfuscator/pom.xml new file mode 100644 index 0000000000..d165e2b933 --- /dev/null +++ b/deobfuscator/pom.xml @@ -0,0 +1,174 @@ + + + + 4.0.0 + + + net.runelite + runelite-parent + 1.5.27-SNAPSHOT + + + deobfuscator + Deobfuscator + + + + net.runelite + runelite-api + ${project.version} + + + net.runelite.rs + runescape-api + ${project.version} + + + net.runelite + fernflower + 20171017 + + + + com.google.guava + guava + 27.1-jre + + + org.slf4j + slf4j-api + 1.8.0-beta4 + + + org.slf4j + slf4j-simple + 1.7.12 + + + com.google.code.gson + gson + 2.8.5 + + + org.ow2.asm + asm-debug-all + 5.2 + + + + net.runelite + runescape-client + ${project.version} + test + + + net.runelite.rs + vanilla + ${rs.version} + test + + + junit + junit + 4.12 + test + + + org.mockito + mockito-all + 1.10.19 + test + + + + + + + src/main/resources + true + + + + + src/test/resources + true + + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.3 + + + generate-sources + + + properties + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.16 + + true + -Xmx2048m + + + + maven-assembly-plugin + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + + + diff --git a/deobfuscator/src/main/java/net/runelite/asm/ClassFile.java b/deobfuscator/src/main/java/net/runelite/asm/ClassFile.java new file mode 100644 index 0000000000..dcbbd91bac --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/ClassFile.java @@ -0,0 +1,420 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm; + +import java.util.ArrayList; +import java.util.List; +import net.runelite.asm.attributes.Annotations; +import net.runelite.asm.attributes.annotation.Annotation; +import net.runelite.asm.pool.Class; +import net.runelite.asm.signature.Signature; +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +public class ClassFile +{ + private ClassGroup group; + + private ClassFile parent; // super class + private final List children = new ArrayList<>(); // classes which inherit from this + + private int version; + private int access; + private Class name; + private Class super_class; + private String source; + private final Interfaces interfaces; + private final List fields = new ArrayList<>(); + private final List methods = new ArrayList<>(); + private final Annotations annotations; + + public ClassFile(ClassGroup group) + { + this.group = group; + + interfaces = new Interfaces(this); + annotations = new Annotations(); + } + + public ClassFile() + { + this(null); + } + + @Override + public String toString() + { + return "ClassFile{" + "name=" + name + '}'; + } + + public int getVersion() + { + return version; + } + + public void setVersion(int version) + { + this.version = version; + } + + public int getAccess() + { + return access; + } + + public void setAccess(int access) + { + this.access = access; + } + + public void accept(ClassVisitor visitor) + { + String[] ints = interfaces.getInterfaces().stream().map(i -> i.getName()).toArray(String[]::new); + + visitor.visit(version, access, name.getName(), null, super_class.getName(), ints); + visitor.visitSource(source, null); + + for (Annotation annotation : annotations.getAnnotations()) + { + AnnotationVisitor av = visitor.visitAnnotation(annotation.getType().toString(), true); + annotation.accept(av); + } + + for (Field field : fields) + { + FieldVisitor fv = visitor.visitField(field.getAccessFlags(), field.getName(), field.getType().toString(), null, field.getValue()); + field.accept(fv); + } + + for (Method method : methods) + { + String[] exceptions = method.getExceptions().getExceptions().stream().map(cl -> cl.getName()).toArray(String[]::new); + if (exceptions.length == 0) + { + exceptions = null; + } + + MethodVisitor mv = visitor.visitMethod(method.getAccessFlags(), method.getName(), method.getDescriptor().toString(), null, exceptions); + method.accept(mv); + } + + visitor.visitEnd(); + } + + public ClassGroup getGroup() + { + return group; + } + + public void setGroup(ClassGroup group) + { + this.group = group; + } + + public Interfaces getInterfaces() + { + return interfaces; + } + + public List getFields() + { + return fields; + } + + public void addField(Field field) + { + fields.add(field); + } + + public void removeField(Field field) + { + fields.remove(field); + } + + public List getMethods() + { + return methods; + } + + public void addMethod(Method method) + { + methods.add(method); + } + + public void removeMethod(Method method) + { + methods.remove(method); + } + + public Annotations getAnnotations() + { + return annotations; + } + + public String getName() + { + return name.getName(); + } + + public void setName(String name) + { + // Must be removed from the class group map first + assert group == null || this.name == null || group.findClass(this.name.getName()) == null; + + this.name = new Class(name); + } + + public String getClassName() + { + String n = getName(); + int i = n.lastIndexOf('/'); + return n.substring(i + 1); + } + + public String getSuperName() + { + return super_class.getName(); + } + + public void setSuperName(String name) + { + super_class = new Class(name); + } + + public String getSource() + { + return source; + } + + public void setSource(String source) + { + this.source = source; + } + + public Class getParentClass() + { + return this.super_class; + } + + public void setParentClass(Class c) + { + super_class = c; + } + + public ClassFile getParent() + { + return parent; + } + + public List getChildren() + { + return children; + } + + public Field findField(String name, Type type) + { + for (Field f : fields) + { + if (f.getName().equals(name) && f.getType().equals(type)) + { + return f; + } + } + return null; + } + + public Field findField(String name) + { + for (Field f : fields) + { + if (f.getName().equals(name)) + { + return f; + } + } + return null; + } + + public Class getPoolClass() + { + return name; + } + + public Field findFieldDeep(String name, Type type) + { + Field f = findField(name, type); + if (f != null) + { + return f; + } + + ClassFile parent = getParent(); + if (parent != null) + { + return parent.findFieldDeep(name, type); + } + + return null; + } + + public Method findMethod(String name, Signature type) + { + for (Method m : methods) + { + if (m.getName().equals(name) && m.getDescriptor().equals(type)) + { + return m; + } + } + return null; + } + + public Method findMethod(String name) + { + for (Method m : methods) + { + if (m.getName().equals(name)) + { + return m; + } + } + return null; + } + + public Method findMethodDeep(String name, Signature type) + { + Method m = findMethod(name, type); + if (m != null) + { + return m; + } + + ClassFile parent = getParent(); + if (parent != null) + { + return parent.findMethodDeep(name, type); + } + + return null; + } + + public Method findMethodDeepStatic(String name, Signature type) + { + Method m = findMethod(name, type); + if (m != null && m.isStatic()) + { + return m; + } + + ClassFile parent = getParent(); + if (parent != null) + { + return parent.findMethodDeepStatic(name, type); + } + + return null; + } + + public Method findMethodDeep(String name) + { + Method m = findMethod(name); + if (m != null) + { + return m; + } + + ClassFile parent = getParent(); + if (parent != null) + { + return parent.findMethodDeep(name); + } + + return null; + } + + public void clearClassGraph() + { + parent = null; + children.clear(); + } + + public void buildClassGraph() + { + ClassFile other = group.findClass(super_class.getName()); + if (other != null) + { + this.parent = other; + parent.children.add(this); + } + + for (ClassFile i : interfaces.getMyInterfaces()) + { + i.children.add(this); + } + } + + public boolean instanceOf(ClassFile other) + { + return this == other || interfaces.instanceOf(other) || (getParent() != null && getParent().instanceOf(other)); + } + + public boolean isAbstract() + { + return (this.access & Opcodes.ACC_ABSTRACT) != 0; + } + + public boolean isFinal() + { + return (this.access & Opcodes.ACC_FINAL) != 0; + } + + public boolean isInterface() + { + return (this.access & Opcodes.ACC_INTERFACE) != 0; + } + + public boolean isEnum() + { + return (this.access & Opcodes.ACC_ENUM) != 0; + } + + public void setEnum() + { + this.access |= Opcodes.ACC_ENUM; + } + + public void clearFinal() + { + this.access &= ~Opcodes.ACC_FINAL; + } + + public void clearAbstract() + { + this.access &= ~Opcodes.ACC_ABSTRACT; + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/ClassGroup.java b/deobfuscator/src/main/java/net/runelite/asm/ClassGroup.java new file mode 100644 index 0000000000..2c6ba531a5 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/ClassGroup.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import net.runelite.asm.attributes.Code; + +public class ClassGroup +{ + private final List classes = new ArrayList<>(); // to keep order + private final Map classMap = new HashMap<>(); + + public void addClass(ClassFile cf) + { + assert cf.getGroup() == this || cf.getGroup() == null; + cf.setGroup(this); + + classes.add(cf); + classMap.put(cf.getName(), cf); + } + + public void removeClass(ClassFile cf) + { + classes.remove(cf); + classMap.remove(cf.getName()); + } + + public void renameClass(ClassFile cf, String newName) + { + assert classes.contains(cf); + assert classMap.get(cf.getName()) == cf; + + classMap.remove(cf.getName()); + cf.setName(newName); + classMap.put(cf.getName(), cf); + } + + public List getClasses() + { + return Collections.unmodifiableList(classes); + } + + public ClassFile findClass(String name) + { + return classMap.get(name); + } + + public void initialize() + { + buildClassGraph(); + lookup(); + } + + public void buildClassGraph() + { + for (ClassFile c : classes) + { + c.clearClassGraph(); + } + + for (ClassFile c : classes) + { + c.buildClassGraph(); + } + } + + public void lookup() + { + for (ClassFile cf : this.getClasses()) + { + for (Method m : cf.getMethods()) + { + Code code = m.getCode(); + + if (code == null) + { + continue; + } + + code.getInstructions().lookup(); + } + } + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/Field.java b/deobfuscator/src/main/java/net/runelite/asm/Field.java new file mode 100644 index 0000000000..8d70053adb --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/Field.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm; + +import net.runelite.asm.attributes.Annotations; +import net.runelite.asm.attributes.annotation.Annotation; +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.Opcodes; + +import static org.objectweb.asm.Opcodes.ACC_PRIVATE; +import static org.objectweb.asm.Opcodes.ACC_PROTECTED; +import static org.objectweb.asm.Opcodes.ACC_PUBLIC; + +public class Field +{ + public static final int ACCESS_MODIFIERS = ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED; + + private final ClassFile classFile; + + private int accessFlags; + private String name; + private Type type; + private Object value; // ConstantValue + private final Annotations annotations; + + public Field(ClassFile classFile, String name, Type type) + { + this.classFile = classFile; + this.name = name; + this.type = type; + + annotations = new Annotations(); + } + + public void accept(FieldVisitor visitor) + { + for (Annotation annotation : annotations.getAnnotations()) + { + AnnotationVisitor av = visitor.visitAnnotation(annotation.getType().toString(), true); + annotation.accept(av); + } + + visitor.visitEnd(); + } + + public ClassFile getClassFile() + { + return classFile; + } + + public int getAccessFlags() + { + return accessFlags; + } + + public void setAccessFlags(int accessFlags) + { + this.accessFlags = accessFlags; + } + + public boolean isPublic() + { + return (accessFlags & Opcodes.ACC_PUBLIC) != 0; + } + + public void setPublic() + { + accessFlags = (short) ((accessFlags & ~ACCESS_MODIFIERS) | ACC_PUBLIC); + } + + public boolean isStatic() + { + return (accessFlags & Opcodes.ACC_STATIC) != 0; + } + + public void setStatic() + { + accessFlags |= Opcodes.ACC_STATIC; + } + + public boolean isSynthetic() + { + return (accessFlags & Opcodes.ACC_SYNTHETIC) != 0; + } + + public void setEnum() + { + accessFlags |= Opcodes.ACC_ENUM; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public Type getType() + { + return type; + } + + public void setType(Type type) + { + this.type = type; + } + + public Object getValue() + { + return value; + } + + public void setValue(Object value) + { + this.value = value; + } + + public Annotations getAnnotations() + { + return annotations; + } + + public net.runelite.asm.pool.Field getPoolField() + { + return new net.runelite.asm.pool.Field( + new net.runelite.asm.pool.Class(classFile.getName()), + this.getName(), + this.getType() + ); + } + + @Override + public String toString() + { + return (this.isStatic() ? "static " : "") + this.type + " " + classFile.getName() + "." + this.getName(); + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/Interfaces.java b/deobfuscator/src/main/java/net/runelite/asm/Interfaces.java new file mode 100644 index 0000000000..a372f9d68c --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/Interfaces.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import net.runelite.asm.pool.Class; + +public class Interfaces +{ + private final ClassFile classFile; + + private final List interfaces = new ArrayList<>(); + + Interfaces(ClassFile c) + { + classFile = c; + } + + public void addInterface(Class clazz) + { + if (!interfaces.contains(clazz)) + { + interfaces.add(clazz); + } + } + + public List getInterfaces() + { + return interfaces; + } + + public void clear() + { + interfaces.clear(); + } + + public List getMyInterfaces() + { + List l = new ArrayList<>(); + for (Class clazz : interfaces) + { + ClassFile iface = classFile.getGroup().findClass(clazz.getName()); + if (iface != null) + { + l.add(iface); + } + } + return l; + } + + public List getNonMyInterfaces() + { + return interfaces.stream().filter(clazz -> classFile.getGroup().findClass(clazz.getName()) == null).collect(Collectors.toList()); + } + + public boolean instanceOf(ClassFile cf) + { + for (Class clazz : interfaces) + { + ClassFile iface = classFile.getGroup().findClass(clazz.getName()); + if (iface.instanceOf(cf)) + { + return true; + } + } + return false; + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/Method.java b/deobfuscator/src/main/java/net/runelite/asm/Method.java new file mode 100644 index 0000000000..bc2c8b305b --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/Method.java @@ -0,0 +1,314 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm; + +import java.util.ArrayList; +import java.util.List; +import net.runelite.asm.attributes.Annotations; +import net.runelite.asm.attributes.Code; +import net.runelite.asm.attributes.Exceptions; +import net.runelite.asm.attributes.annotation.Annotation; +import net.runelite.asm.attributes.code.Instruction; +import net.runelite.asm.attributes.code.LocalVariable; +import net.runelite.asm.attributes.code.Parameter; +import net.runelite.asm.attributes.code.instruction.types.LVTInstruction; +import net.runelite.asm.signature.Signature; +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodVisitor; +import static org.objectweb.asm.Opcodes.ACC_FINAL; +import static org.objectweb.asm.Opcodes.ACC_NATIVE; +import static org.objectweb.asm.Opcodes.ACC_PRIVATE; +import static org.objectweb.asm.Opcodes.ACC_PROTECTED; +import static org.objectweb.asm.Opcodes.ACC_PUBLIC; +import static org.objectweb.asm.Opcodes.ACC_STATIC; +import static org.objectweb.asm.Opcodes.ACC_SYNCHRONIZED; + +public class Method +{ + public static final int ACCESS_MODIFIERS = ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED; + + private final ClassFile classFile; + + private int accessFlags; + private String name; + private Signature arguments; + private Exceptions exceptions; + private Annotations annotations; + private List parameters; + private Code code; + + public Method(ClassFile classFile, String name, Signature signature) + { + this.classFile = classFile; + this.name = name; + this.arguments = signature; + exceptions = new Exceptions(); + annotations = new Annotations(); + parameters = new ArrayList<>(); + } + + public ClassFile getClassFile() + { + return classFile; + } + + @Override + public String toString() + { + return (this.isStatic() ? "static " : "") + classFile.getName() + "." + this.name + this.arguments; + } + + public void accept(MethodVisitor visitor) + { + //This is required to name unused parameters + for (Parameter p : parameters) + { + visitor.visitParameter(p.getName(), p.getAccess()); + } + + for (Annotation annotation : annotations.getAnnotations()) + { + AnnotationVisitor av = visitor.visitAnnotation(annotation.getType().toString(), true); + annotation.accept(av); + } + + if (code != null) + { + code.getInstructions().rebuildLabels(); + + visitor.visitCode(); + + net.runelite.asm.attributes.code.Exceptions exceptions = code.getExceptions(); + for (net.runelite.asm.attributes.code.Exception exception : exceptions.getExceptions()) + { + assert exception.getStart().getLabel() != null; + assert exception.getEnd().getLabel() != null; + assert exception.getHandler().getLabel() != null; + + int idxStart = code.getInstructions().getInstructions().indexOf(exception.getStart()); + int idxEnd = code.getInstructions().getInstructions().indexOf(exception.getEnd()); + + assert idxStart != -1; + assert idxEnd != -1; + assert code.getInstructions().getInstructions().contains(exception.getHandler()); + + assert idxEnd > idxStart; + + visitor.visitTryCatchBlock( + exception.getStart().getLabel(), + exception.getEnd().getLabel(), + exception.getHandler().getLabel(), + exception.getCatchType() != null ? exception.getCatchType().getName() : null + ); + } + + for (Instruction i : code.getInstructions().getInstructions()) + { + i.accept(visitor); + } + + //Find first and last label for this method + if (parameters.size() > 0) + { + Label startLabel = null; + Label endLabel = null; + for (Instruction i : code.getInstructions().getInstructions()) + { + if (i instanceof net.runelite.asm.attributes.code.Label) + { + if (startLabel == null) + { + startLabel = ((net.runelite.asm.attributes.code.Label) i).getLabel(); + } + endLabel = ((net.runelite.asm.attributes.code.Label) i).getLabel(); + } + } + + for (Parameter p : parameters) + { + LocalVariable lv = p.getLocalVariable(); + if (lv != null) + { + visitor.visitLocalVariable(lv.getName(), lv.getDesc(), lv.getSignature(), startLabel, endLabel, lv.getIndex()); + } + } + } + + visitor.visitMaxs(code.getMaxStack(), code.getMaxLocals()); + } + + visitor.visitEnd(); + } + + public int getAccessFlags() + { + return accessFlags; + } + + public void setAccessFlags(int accessFlags) + { + this.accessFlags = accessFlags; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public Signature getDescriptor() + { + return arguments; + } + + public void setDescriptor(Signature signature) + { + this.arguments = signature; + } + + public boolean isNative() + { + return (accessFlags & ACC_NATIVE) != 0; + } + + public boolean isStatic() + { + return (accessFlags & ACC_STATIC) != 0; + } + + public void setStatic() + { + accessFlags |= ACC_STATIC; + } + + public boolean isSynchronized() + { + return (accessFlags & ACC_SYNCHRONIZED) != 0; + } + + public boolean isFinal() + { + return (accessFlags & ACC_FINAL) != 0; + } + + public void setFinal(boolean f) + { + if (f) + { + accessFlags |= ACC_FINAL; + } + else + { + accessFlags &= ~ACC_FINAL; + } + } + + public boolean isPrivate() + { + return (accessFlags & ACC_PRIVATE) != 0; + } + + public void setPrivate() + { + accessFlags = (short) ((accessFlags & ~ACCESS_MODIFIERS) | ACC_PRIVATE); + } + + public void setPublic() + { + accessFlags = (short) ((accessFlags & ~ACCESS_MODIFIERS) | ACC_PUBLIC); + } + + public Exceptions getExceptions() + { + return exceptions; + } + + public Code getCode() + { + return code; + } + + public void setCode(Code code) + { + this.code = code; + } + + public Annotations getAnnotations() + { + return annotations; + } + + @SuppressWarnings("unchecked") + public List findLVTInstructionsForVariable(int index) + { + List list = new ArrayList<>(); + + if (getCode() == null) + { + return null; + } + + for (Instruction ins : getCode().getInstructions().getInstructions()) + { + if (ins instanceof LVTInstruction) + { + LVTInstruction lv = (LVTInstruction) ins; + + if (lv.getVariableIndex() != index) + { + continue; + } + + list.add((T) ins); + } + } + + return list; + } + + public net.runelite.asm.pool.Method getPoolMethod() + { + return new net.runelite.asm.pool.Method( + new net.runelite.asm.pool.Class(classFile.getName()), + name, + arguments + ); + } + + public List getParameters() + { + return parameters; + } + + public void setParameters(List parameters) + { + this.parameters = parameters; + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/Type.java b/deobfuscator/src/main/java/net/runelite/asm/Type.java new file mode 100644 index 0000000000..68ba6960d4 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/Type.java @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm; + +import net.runelite.asm.pool.Class; + +/** + * Created by Kyle Fricilone on 8/20/2017 + */ +public class Type +{ + + public static final Type VOID = new Type("V"); + public static final Type BOOLEAN = new Type("Z"); + public static final Type CHAR = new Type("C"); + public static final Type BYTE = new Type("B"); + public static final Type SHORT = new Type("S"); + public static final Type INT = new Type("I"); + public static final Type FLOAT = new Type("F"); + public static final Type LONG = new Type("J"); + public static final Type DOUBLE = new Type("D"); + public static final Type OBJECT = new Type("Ljava/lang/Object;"); + public static final Type STRING = new Type("Ljava/lang/String;"); + public static final Type THROWABLE = new Type("Ljava/lang/Throwable;"); + public static final Type EXCEPTION = new Type("Ljava/lang/Exception;"); + + private final String type; + + public Type(String type) + { + this.type = type; + } + + public boolean isPrimitive() + { + return this.equals(BOOLEAN) || this.equals(BYTE) || this.equals(SHORT) || this.equals(CHAR) || this.equals(INT) + || this.equals(VOID) || this.equals(LONG) || this.equals(FLOAT) || this.equals(DOUBLE); + } + + public boolean isObject() + { + return this.equals(OBJECT); + } + + public boolean isArray() + { + return getDimensions() > 0; + } + + public boolean isStackInt() + { + return this.equals(BOOLEAN) || this.equals(BYTE) || this.equals(SHORT) || this.equals(CHAR) || this.equals(INT); + } + + public int getSize() + { + if (this.equals(LONG) || this.equals(DOUBLE)) + { + return 2; + } + + if (this.equals(VOID)) + { + return 0; + } + + return 1; + } + + public int getDimensions() + { + return getDimensions(type); + } + + public Type getSubtype() + { + if (!type.startsWith("[")) + { + throw new IllegalStateException(type + " is not an array"); + } + return new Type(type.substring(1)); + } + + public String getInternalName() + { + String s = type; + while (s.startsWith("[")) + { + s = s.substring(1); + } + if (s.startsWith("L")) + { + return s.substring(1, s.length() - 1); + } + else + { + return s; + } + } + + @Override + public boolean equals(Object o) + { + if (!(o instanceof Type)) + { + return false; + } + + Type other = (Type) o; + return type.equals(other.type); + } + + @Override + public int hashCode() + { + return type.hashCode(); + } + + @Override + public String toString() + { + return type; + } + + public String toAsmString() + { + if (type.startsWith("L") && type.endsWith(";")) + { + return type.substring(1, type.length() - 1); + } + else + { + return type; + } + } + + public static Type fromAsmString(String str) + { + if (str.startsWith("[")) + { + // array type + return new Type(str); + } + else + { + // object type + return new Type("L" + str + ";"); + } + } + + private static int getDimensions(String type) + { + if (!type.startsWith("[")) + { + return 0; + } + + return (int) type.chars().filter(i -> i == '[').count(); + } + + public static Type getType(String type, int dims) + { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < dims; i++) + { + builder.append('['); + } + return new Type(builder.append(type).toString()); + } + + public static Type getType(Object object) + { + Type type; + + if (object instanceof Double) + { + type = DOUBLE; + } + else if (object instanceof Float) + { + type = FLOAT; + } + else if (object instanceof Integer) + { + type = INT; + } + else if (object instanceof Long) + { + type = LONG; + } + else if (object instanceof String) + { + type = STRING; + } + else if (object instanceof Class) + { + type = new Type("L" + ((Class) object).getName() + ";"); + } + else + { + throw new IllegalArgumentException("Unexpected object type: " + object.getClass()); + } + + return type; + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/Annotations.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/Annotations.java new file mode 100644 index 0000000000..b14d761c28 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/Annotations.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.asm.attributes; + +import java.util.ArrayList; +import java.util.List; + +import net.runelite.asm.Type; +import net.runelite.asm.attributes.annotation.Annotation; +import net.runelite.asm.attributes.annotation.Element; + +public class Annotations +{ + private final List annotations = new ArrayList<>(); + + public List getAnnotations() + { + return annotations; + } + + public void addAnnotation(Annotation annotation) + { + annotations.add(annotation); + } + + public void removeAnnotation(Annotation annotation) + { + annotations.remove(annotation); + } + + public void clearAnnotations() + { + annotations.clear(); + } + + public Annotation find(Type type) + { + for (Annotation a : annotations) + if (a.getType().equals(type)) + return a; + return null; + } + + public int size() + { + return annotations.size(); + } + + public Annotation addAnnotation(Type type, String name, Object value) + { + Annotation annotation = new Annotation(this); + annotation.setType(type); + addAnnotation(annotation); + + Element element = new Element(annotation); + element.setName(name); + element.setValue(value); + annotation.addElement(element); + + return annotation; + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/Code.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/Code.java new file mode 100644 index 0000000000..2a3f08126c --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/Code.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.asm.attributes; + +import net.runelite.asm.Method; +import net.runelite.asm.attributes.code.Exceptions; +import net.runelite.asm.attributes.code.Instruction; +import net.runelite.asm.attributes.code.Instructions; +import net.runelite.asm.attributes.code.instruction.types.LVTInstruction; +import net.runelite.asm.signature.Signature; + +public class Code +{ + private Method method; + private int maxStack; + private Instructions instructions; + private final Exceptions exceptions; + + public Code(Method method) + { + this.method = method; + + exceptions = new Exceptions(this); + instructions = new Instructions(this); + } + + public Method getMethod() + { + return method; + } + + public int getMaxStack() + { + return maxStack; + } + + public void setMaxStack(int maxStack) + { + this.maxStack = maxStack; + } + + private int getMaxLocalsFromSig() + { + Method m = getMethod(); + int num = m.isStatic() ? 0 : 1; + Signature sig = m.getDescriptor(); + for (int i = 0; i < sig.size(); ++i) + num += sig.getTypeOfArg(i).getSize(); + return num; + } + + /** + * calculates the size of the lvt required for this method + * @return + */ + public int getMaxLocals() + { + int max = -1; + + for (Instruction ins : instructions.getInstructions()) + { + if (ins instanceof LVTInstruction) + { + LVTInstruction lvt = (LVTInstruction) ins; + + int sizeRequired = lvt.getVariableIndex() + lvt.type().getSlots(); + if (sizeRequired > max) + { + max = sizeRequired; + } + } + } + + int fromSig = getMaxLocalsFromSig(); + if (fromSig > max) + max = fromSig; + + return max; + } + + public Exceptions getExceptions() + { + return exceptions; + } + + public Instructions getInstructions() + { + return instructions; + } +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSItem.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/Exceptions.java similarity index 69% rename from runescape-api/src/main/java/net/runelite/rs/api/RSItem.java rename to deobfuscator/src/main/java/net/runelite/asm/attributes/Exceptions.java index 4f451cf028..0b12c513fd 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSItem.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/Exceptions.java @@ -22,39 +22,38 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.rs.api; -import net.runelite.api.Item; -import net.runelite.api.Tile; -import net.runelite.mapping.Import; +package net.runelite.asm.attributes; -public interface RSItem extends RSRenderable, Item +import java.util.ArrayList; +import java.util.List; +import net.runelite.asm.ClassFile; +import net.runelite.asm.pool.Class; + +public class Exceptions { - @Import("id") - @Override - int getId(); + private final List classes = new ArrayList<>(); - @Import("id") - void setId(int id); + public void addException(Class cl) + { + classes.add(cl); + } - @Import("quantity") - @Override - int getQuantity(); - - @Import("quantity") - void setQuantity(int quantity); - - int getX(); - - void setX(int x); - - int getY(); - - void setY(int y); - - /** - * Get the tile this item is on - * @return - */ - Tile getTile(); + public List getExceptions() + { + return classes; + } + + public void renameClass(ClassFile cf, String name) + { + for (Class c : new ArrayList<>(classes)) + { + if (c.getName().equals(cf.getName())) + { + int idx = classes.indexOf(c); + classes.remove(idx); + classes.add(idx, new Class(name)); + } + } + } } diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/annotation/Annotation.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/annotation/Annotation.java new file mode 100644 index 0000000000..7c727eb788 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/annotation/Annotation.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.asm.attributes.annotation; + +import java.util.ArrayList; +import java.util.List; + +import net.runelite.asm.Type; +import net.runelite.asm.attributes.Annotations; +import org.objectweb.asm.AnnotationVisitor; + +public class Annotation +{ + private final Annotations annotations; + private Type type; + private final List elements = new ArrayList<>(); + + public Annotation(Annotations annotations) + { + this.annotations = annotations; + } + + public Annotations getAnnotations() + { + return annotations; + } + + public void setType(Type type) + { + this.type = type; + } + + public Type getType() + { + return type; + } + + public List getElements() + { + return elements; + } + + public Element getElement() + { + return elements.get(0); + } + + public void addElement(Element element) + { + elements.add(element); + } + + public void accept(AnnotationVisitor visitor) + { + for (Element element : elements) + visitor.visit(element.getName(), element.getValue()); + visitor.visitEnd(); + } +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSMessageNode.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/annotation/Element.java similarity index 70% rename from runescape-api/src/main/java/net/runelite/rs/api/RSMessageNode.java rename to deobfuscator/src/main/java/net/runelite/asm/attributes/annotation/Element.java index f673e58c7a..18fdfa33f4 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSMessageNode.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/annotation/Element.java @@ -22,41 +22,47 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.rs.api; -import net.runelite.api.MessageNode; -import net.runelite.mapping.Import; +package net.runelite.asm.attributes.annotation; -public interface RSMessageNode extends MessageNode +public class Element { - @Import("id") - @Override - int getId(); + private final Annotation annotation; + private String name; + private Object value; + + public Element(Annotation annotation) + { + this.annotation = annotation; + } - @Import("type") - int getRSType(); + public Annotation getAnnotation() + { + return annotation; + } - @Import("name") - @Override - String getName(); + public String getName() + { + return name; + } - @Import("name") - @Override - void setName(String name); + public void setName(String name) + { + this.name = name; + } - @Import("sender") - @Override - String getSender(); + public Object getValue() + { + return value; + } - @Import("sender") - @Override - void setSender(String sender); - - @Import("value") - @Override - String getValue(); - - @Import("value") - @Override - void setValue(String value); + public void setValue(Object value) + { + this.value = value; + } + + public String getString() + { + return value.toString(); + } } diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Exception.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Exception.java new file mode 100644 index 0000000000..b1209a6631 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Exception.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.asm.attributes.code; + +import net.runelite.asm.ClassFile; +import net.runelite.asm.pool.Class; + +public class Exception implements Cloneable +{ + private Exceptions exceptions; + + private Label start, end, handler; + private Class catchType; + + public Exception(Exceptions exceptions) + { + this.exceptions = exceptions; + } + + @Override + public Exception clone() + { + try + { + return (Exception) super.clone(); + } + catch (CloneNotSupportedException ex) + { + throw new RuntimeException(); + } + } + + public Exceptions getExceptions() + { + return exceptions; + } + + public void setExceptions(Exceptions exceptions) + { + this.exceptions = exceptions; + } + + public Label getStart() + { + return start; + } + + public void setStart(Label ins) + { + start = ins; + } + + public Label getEnd() + { + return end; + } + + public void setEnd(Label end) + { + this.end = end; + } + + public Label getHandler() + { + return handler; + } + + public void setHandler(Label handler) + { + this.handler = handler; + } + + public Class getCatchType() + { + return catchType; + } + + public void setCatchType(Class catchType) + { + this.catchType = catchType; + } + + public void renameClass(ClassFile cf, String name) + { + if (catchType != null && cf.getName().equals(catchType.getName())) + catchType = new Class(name); + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Exceptions.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Exceptions.java new file mode 100644 index 0000000000..30b00a0115 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Exceptions.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.asm.attributes.code; + +import java.util.ArrayList; +import java.util.List; +import net.runelite.asm.ClassFile; +import net.runelite.asm.attributes.Code; + +public class Exceptions +{ + private Code code; + private List exceptions = new ArrayList(); + + public Exceptions(Code code) + { + this.code = code; + } + + public void add(Exception e) + { + exceptions.add(e); + } + + public void remove(Exception e) + { + exceptions.remove(e); + } + + public void clear() + { + exceptions.clear(); + } + + public Code getCode() + { + return code; + } + + public List getExceptions() + { + return exceptions; + } + + public void renameClass(ClassFile cf, String name) + { + for (Exception e : exceptions) + e.renameClass(cf, name); + } +} \ No newline at end of file diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Instruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Instruction.java new file mode 100644 index 0000000000..bf8e64535e --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Instruction.java @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm.attributes.code; + +import net.runelite.asm.Method; +import net.runelite.asm.execution.Frame; +import net.runelite.asm.execution.InstructionContext; +import org.objectweb.asm.MethodVisitor; + +public abstract class Instruction implements Cloneable +{ + private Instructions instructions; + private InstructionType type; + + public Instruction(Instructions instructions, InstructionType type) + { + this.instructions = instructions; + this.type = type; + } + + @Override + public String toString() + { + if (this.getInstructions() != null) + { + Method m = this.getInstructions().getCode().getMethod(); + return super.toString() + " in " + m;// + " at pc 0x" + Integer.toHexString(this.getPc()); + } + else + { + return super.toString() + " "; + } + } + + @Override + public Instruction clone() + { + Instruction i; + try + { + i = (Instruction) super.clone(); + } + catch (CloneNotSupportedException ex) + { + throw new RuntimeException(ex); + } + + return i; + } + + protected void remove() + { + Exceptions exceptions = instructions.getCode().getExceptions(); + for (Exception e : exceptions.getExceptions()) + { + assert this != e.getStart(); + assert this != e.getEnd(); + assert this != e.getHandler(); + } + } + + public boolean removeStack() + { + assert instructions != null; + + this.getInstructions().remove(this); // calls remove() + + return true; + } + + // resolve jumps + public void resolve() + { + } + + public void accept(MethodVisitor visitor) + { + visitor.visitInsn(this.getType().getCode()); + } + + public Instructions getInstructions() + { + return instructions; + } + + public void setInstructions(Instructions instructions) + { + this.instructions = instructions; + } + + public InstructionType getType() + { + return type; + } + + protected void setType(InstructionType type) + { + this.type = type; + } + + public abstract InstructionContext execute(Frame e); + + /* does this terminate a block? */ + public boolean isTerminal() + { + return false; + } + + // look up symbols from pool + public void lookup() + { + } + + // instructions keep resolved method/field/class names, this updates the pool value (if the underlying resolved object changes) + public void regeneratePool() + { + } + + public void renameClass(String oldName, String newName) + { + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/InstructionType.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/InstructionType.java new file mode 100644 index 0000000000..919da1bb02 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/InstructionType.java @@ -0,0 +1,350 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm.attributes.code; + +import net.runelite.asm.attributes.code.instructions.AALoad; +import net.runelite.asm.attributes.code.instructions.AAStore; +import net.runelite.asm.attributes.code.instructions.AConstNull; +import net.runelite.asm.attributes.code.instructions.ALoad; +import net.runelite.asm.attributes.code.instructions.ANewArray; +import net.runelite.asm.attributes.code.instructions.AStore; +import net.runelite.asm.attributes.code.instructions.AThrow; +import net.runelite.asm.attributes.code.instructions.ArrayLength; +import net.runelite.asm.attributes.code.instructions.BALoad; +import net.runelite.asm.attributes.code.instructions.BAStore; +import net.runelite.asm.attributes.code.instructions.BiPush; +import net.runelite.asm.attributes.code.instructions.CALoad; +import net.runelite.asm.attributes.code.instructions.CAStore; +import net.runelite.asm.attributes.code.instructions.CheckCast; +import net.runelite.asm.attributes.code.instructions.D2F; +import net.runelite.asm.attributes.code.instructions.D2I; +import net.runelite.asm.attributes.code.instructions.D2L; +import net.runelite.asm.attributes.code.instructions.DALoad; +import net.runelite.asm.attributes.code.instructions.DAStore; +import net.runelite.asm.attributes.code.instructions.DAdd; +import net.runelite.asm.attributes.code.instructions.DCmpG; +import net.runelite.asm.attributes.code.instructions.DCmpL; +import net.runelite.asm.attributes.code.instructions.DDiv; +import net.runelite.asm.attributes.code.instructions.DLoad; +import net.runelite.asm.attributes.code.instructions.DMul; +import net.runelite.asm.attributes.code.instructions.DNeg; +import net.runelite.asm.attributes.code.instructions.DRem; +import net.runelite.asm.attributes.code.instructions.DStore; +import net.runelite.asm.attributes.code.instructions.DSub; +import net.runelite.asm.attributes.code.instructions.Dup; +import net.runelite.asm.attributes.code.instructions.Dup2; +import net.runelite.asm.attributes.code.instructions.Dup2_X1; +import net.runelite.asm.attributes.code.instructions.Dup2_X2; +import net.runelite.asm.attributes.code.instructions.Dup_X1; +import net.runelite.asm.attributes.code.instructions.Dup_X2; +import net.runelite.asm.attributes.code.instructions.F2D; +import net.runelite.asm.attributes.code.instructions.F2I; +import net.runelite.asm.attributes.code.instructions.F2L; +import net.runelite.asm.attributes.code.instructions.FALoad; +import net.runelite.asm.attributes.code.instructions.FAStore; +import net.runelite.asm.attributes.code.instructions.FAdd; +import net.runelite.asm.attributes.code.instructions.FCmpG; +import net.runelite.asm.attributes.code.instructions.FCmpL; +import net.runelite.asm.attributes.code.instructions.FDiv; +import net.runelite.asm.attributes.code.instructions.FLoad; +import net.runelite.asm.attributes.code.instructions.FMul; +import net.runelite.asm.attributes.code.instructions.FNeg; +import net.runelite.asm.attributes.code.instructions.FRem; +import net.runelite.asm.attributes.code.instructions.FStore; +import net.runelite.asm.attributes.code.instructions.FSub; +import net.runelite.asm.attributes.code.instructions.GetField; +import net.runelite.asm.attributes.code.instructions.GetStatic; +import net.runelite.asm.attributes.code.instructions.Goto; +import net.runelite.asm.attributes.code.instructions.GotoW; +import net.runelite.asm.attributes.code.instructions.I2B; +import net.runelite.asm.attributes.code.instructions.I2C; +import net.runelite.asm.attributes.code.instructions.I2D; +import net.runelite.asm.attributes.code.instructions.I2F; +import net.runelite.asm.attributes.code.instructions.I2L; +import net.runelite.asm.attributes.code.instructions.I2S; +import net.runelite.asm.attributes.code.instructions.IALoad; +import net.runelite.asm.attributes.code.instructions.IAStore; +import net.runelite.asm.attributes.code.instructions.IAdd; +import net.runelite.asm.attributes.code.instructions.IAnd; +import net.runelite.asm.attributes.code.instructions.IConstZero; +import net.runelite.asm.attributes.code.instructions.IDiv; +import net.runelite.asm.attributes.code.instructions.IInc; +import net.runelite.asm.attributes.code.instructions.ILoad; +import net.runelite.asm.attributes.code.instructions.IMul; +import net.runelite.asm.attributes.code.instructions.INeg; +import net.runelite.asm.attributes.code.instructions.IOr; +import net.runelite.asm.attributes.code.instructions.IRem; +import net.runelite.asm.attributes.code.instructions.IShL; +import net.runelite.asm.attributes.code.instructions.IShR; +import net.runelite.asm.attributes.code.instructions.IStore; +import net.runelite.asm.attributes.code.instructions.ISub; +import net.runelite.asm.attributes.code.instructions.IUShR; +import net.runelite.asm.attributes.code.instructions.IXor; +import net.runelite.asm.attributes.code.instructions.IfACmpEq; +import net.runelite.asm.attributes.code.instructions.IfACmpNe; +import net.runelite.asm.attributes.code.instructions.IfCmpGe; +import net.runelite.asm.attributes.code.instructions.IfCmpGt; +import net.runelite.asm.attributes.code.instructions.IfCmpLe; +import net.runelite.asm.attributes.code.instructions.IfCmpLt; +import net.runelite.asm.attributes.code.instructions.IfEq; +import net.runelite.asm.attributes.code.instructions.IfGe; +import net.runelite.asm.attributes.code.instructions.IfGt; +import net.runelite.asm.attributes.code.instructions.IfICmpEq; +import net.runelite.asm.attributes.code.instructions.IfICmpNe; +import net.runelite.asm.attributes.code.instructions.IfLe; +import net.runelite.asm.attributes.code.instructions.IfLt; +import net.runelite.asm.attributes.code.instructions.IfNe; +import net.runelite.asm.attributes.code.instructions.IfNonNull; +import net.runelite.asm.attributes.code.instructions.IfNull; +import net.runelite.asm.attributes.code.instructions.InstanceOf; +import net.runelite.asm.attributes.code.instructions.InvokeDynamic; +import net.runelite.asm.attributes.code.instructions.InvokeInterface; +import net.runelite.asm.attributes.code.instructions.InvokeSpecial; +import net.runelite.asm.attributes.code.instructions.InvokeStatic; +import net.runelite.asm.attributes.code.instructions.InvokeVirtual; +import net.runelite.asm.attributes.code.instructions.L2D; +import net.runelite.asm.attributes.code.instructions.L2F; +import net.runelite.asm.attributes.code.instructions.L2I; +import net.runelite.asm.attributes.code.instructions.LALoad; +import net.runelite.asm.attributes.code.instructions.LAStore; +import net.runelite.asm.attributes.code.instructions.LAdd; +import net.runelite.asm.attributes.code.instructions.LAnd; +import net.runelite.asm.attributes.code.instructions.LCmp; +import net.runelite.asm.attributes.code.instructions.LDC; +import net.runelite.asm.attributes.code.instructions.LDiv; +import net.runelite.asm.attributes.code.instructions.LLoad; +import net.runelite.asm.attributes.code.instructions.LMul; +import net.runelite.asm.attributes.code.instructions.LNeg; +import net.runelite.asm.attributes.code.instructions.LOr; +import net.runelite.asm.attributes.code.instructions.LRem; +import net.runelite.asm.attributes.code.instructions.LShL; +import net.runelite.asm.attributes.code.instructions.LShR; +import net.runelite.asm.attributes.code.instructions.LStore; +import net.runelite.asm.attributes.code.instructions.LSub; +import net.runelite.asm.attributes.code.instructions.LUShR; +import net.runelite.asm.attributes.code.instructions.LXor; +import net.runelite.asm.attributes.code.instructions.LookupSwitch; +import net.runelite.asm.attributes.code.instructions.MonitorEnter; +import net.runelite.asm.attributes.code.instructions.MonitorExit; +import net.runelite.asm.attributes.code.instructions.MultiANewArray; +import net.runelite.asm.attributes.code.instructions.NOP; +import net.runelite.asm.attributes.code.instructions.New; +import net.runelite.asm.attributes.code.instructions.NewArray; +import net.runelite.asm.attributes.code.instructions.Pop; +import net.runelite.asm.attributes.code.instructions.Pop2; +import net.runelite.asm.attributes.code.instructions.PutField; +import net.runelite.asm.attributes.code.instructions.PutStatic; +import net.runelite.asm.attributes.code.instructions.Return; +import net.runelite.asm.attributes.code.instructions.SALoad; +import net.runelite.asm.attributes.code.instructions.SAStore; +import net.runelite.asm.attributes.code.instructions.SiPush; +import net.runelite.asm.attributes.code.instructions.Swap; +import net.runelite.asm.attributes.code.instructions.TableSwitch; +import net.runelite.asm.attributes.code.instructions.VReturn; + +public enum InstructionType +{ + NOP(0x00, "nop", NOP.class), + ACONST_NULL(0x01, "aconst_null", AConstNull.class), + ICONST_0(0x03, "iconst_0", IConstZero.class), + BIPUSH(0x10, "bipush", BiPush.class), + SIPUSH(0x11, "sipush", SiPush.class), + LDC(-1, "ldc", LDC.class), + ILOAD(0x15, "iload", ILoad.class), + LLOAD(0x16, "lload", LLoad.class), + FLOAD(0x17, "fload", FLoad.class), + DLOAD(0x18, "dload", DLoad.class), + ALOAD(0x19, "aload", ALoad.class), + IALOAD(0x2e, "iaload", IALoad.class), + LALOAD(0x2f, "laload", LALoad.class), + FALOAD(0x30, "faload", FALoad.class), + DALOAD(0x31, "daload", DALoad.class), + AALOAD(0x32, "aaload", AALoad.class), + BALOAD(0x33, "baload", BALoad.class), + CALOAD(0x34, "caload", CALoad.class), + SALOAD(0x35, "saload", SALoad.class), + ISTORE(0x36, "istore", IStore.class), + LSTORE(0x37, "lstore", LStore.class), + FSTORE(0x38, "fstore", FStore.class), + DSTORE(0x39, "dstore", DStore.class), + ASTORE(0x3a, "astore", AStore.class), + IASTORE(0x4f, "iastore", IAStore.class), + LASTORE(0x50, "lastore", LAStore.class), + FASTORE(0x51, "fastore", FAStore.class), + DASTORE(0x52, "dastore", DAStore.class), + AASTORE(0x53, "aastore", AAStore.class), + BASTORE(0x54, "bastore", BAStore.class), + CASTORE(0x55, "castore", CAStore.class), + SASTORE(0x56, "sastore", SAStore.class), + POP(0x57, "pop", Pop.class), + POP2(0x58, "pop2", Pop2.class), + DUP(0x59, "dup", Dup.class), + DUP_X1(0x5a, "dup_x1", Dup_X1.class), + DUP_X2(0x5b, "dup_x2", Dup_X2.class), + DUP2(0x5c, "dup2", Dup2.class), + DUP2_X1(0x5d, "dup2_x1", Dup2_X1.class), + DUP2_X2(0x5e, "dup2_x2", Dup2_X2.class), + SWAP(0x5f, "swap", Swap.class), + IADD(0x60, "iadd", IAdd.class), + LADD(0x61, "ladd", LAdd.class), + FADD(0x62, "fadd", FAdd.class), + DADD(0x63, "dadd", DAdd.class), + ISUB(0x64, "isub", ISub.class), + LSUB(0x65, "lsub", LSub.class), + FSUB(0x66, "fsub", FSub.class), + DSUB(0x67, "dsub", DSub.class), + IMUL(0x68, "imul", IMul.class), + LMUL(0x69, "lmul", LMul.class), + FMUL(0x6a, "fmul", FMul.class), + DMUL(0x6b, "dmul", DMul.class), + IDIV(0x6c, "idiv", IDiv.class), + LDIV(0x6d, "ldiv", LDiv.class), + FDIV(0x6e, "fdiv", FDiv.class), + DDIV(0x6f, "ddiv", DDiv.class), + IREM(0x70, "irem", IRem.class), + LREM(0x71, "lrem", LRem.class), + FREM(0x72, "frem", FRem.class), + DREM(0x73, "drem", DRem.class), + INEG(0x74, "ineg", INeg.class), + LNEG(0x75, "lneg", LNeg.class), + FNEG(0x76, "fneg", FNeg.class), + DNEG(0x77, "dneg", DNeg.class), + ISHL(0x78, "ishl", IShL.class), + LSHL(0x79, "lshl", LShL.class), + ISHR(0x7a, "ishr", IShR.class), + LSHR(0x7b, "lshr", LShR.class), + IUSHR(0x7c, "iushr", IUShR.class), + LUSHR(0x7d, "lushr", LUShR.class), + IAND(0x7e, "iand", IAnd.class), + LAND(0x7f, "land", LAnd.class), + IOR(0x80, "ior", IOr.class), + LOR(0x81, "lor", LOr.class), + IXOR(0x82, "ixor", IXor.class), + LXOR(0x83, "lxor", LXor.class), + IINC(0x84, "iinc", IInc.class), + I2L(0x85, "i2l", I2L.class), + I2F(0x86, "i2f", I2F.class), + I2D(0x87, "i2d", I2D.class), + L2I(0x88, "l2i", L2I.class), + L2F(0x89, "l2f", L2F.class), + L2D(0x8a, "l2d", L2D.class), + F2I(0x8b, "f2i", F2I.class), + F2L(0x8c, "f2l", F2L.class), + F2D(0x8d, "f2d", F2D.class), + D2I(0x8e, "d2i", D2I.class), + D2L(0x8f, "d2l", D2L.class), + D2F(0x90, "d2f", D2F.class), + I2B(0x91, "i2b", I2B.class), + I2C(0x92, "i2c", I2C.class), + I2S(0x93, "i2s", I2S.class), + LCMP(0x94, "lcmp", LCmp.class), + FCMPL(0x95, "fcmpl", FCmpL.class), + FCMPG(0x96, "fcmpg", FCmpG.class), + DCMPL(0x97, "dcmpl", DCmpL.class), + DCMPG(0x98, "dcmpg", DCmpG.class), + IFEQ(0x99, "ifeq", IfEq.class), + IFNE(0x9a, "ifne", IfNe.class), + IFLT(0x9b, "iflt", IfLt.class), + IFGE(0x9c, "ifge", IfGe.class), + IFGT(0x9d, "ifgt", IfGt.class), + IFLE(0x9e, "ifle", IfLe.class), + IF_ICMPEQ(0x9f, "if_icmpeq", IfICmpEq.class), + IF_ICMPNE(0xa0, "if_icmpne", IfICmpNe.class), + IF_ICMPLT(0xa1, "if_cmplt", IfCmpLt.class), + IF_ICMPGE(0xa2, "if_icmpge", IfCmpGe.class), + IF_ICMPGT(0xa3, "if_icmpgt", IfCmpGt.class), + IF_ICMPLE(0xa4, "if_icmple", IfCmpLe.class), + IF_ACMPEQ(0xa5, "if_acmpeq", IfACmpEq.class), + IF_ACMPNE(0xa6, "if_acmpne", IfACmpNe.class), + GOTO(0xa7, "goto", Goto.class), + TABLESWITCH(0xaa, "tableswitch", TableSwitch.class), + LOOKUPSWITCH(0xab, "lookupswitch", LookupSwitch.class), + IRETURN(0xac, "ireturn", Return.class), + LRETURN(0xad, "lreturn", Return.class), + FRETURN(0xae, "freturn", Return.class), + DRETURN(0xaf, "dreturn", Return.class), + ARETURN(0xb0, "areturn", Return.class), + RETURN(0xb1, "return", VReturn.class), + GETSTATIC(0xb2, "getstatic", GetStatic.class), + PUTSTATIC(0xb3, "putstatic", PutStatic.class), + GETFIELD(0xb4, "getfield", GetField.class), + PUTFIELD(0xb5, "putfield", PutField.class), + INVOKEVIRTUAL(0xb6, "invokevirtual", InvokeVirtual.class), + INVOKESPECIAL(0xb7, "invokespecial", InvokeSpecial.class), + INVOKESTATIC(0xb8, "invokestatic", InvokeStatic.class), + INVOKEINTERFACE(0xb9, "invokeinterface", InvokeInterface.class), + INVOKEDYNAMIC(0xba, "invokedynamic", InvokeDynamic.class), + NEW(0xbb, "new", New.class), + NEWARRAY(0xbc, "newarray", NewArray.class), + ANEWARRAY(0xbd, "anewarray", ANewArray.class), + ARRAYLENGTH(0xbe, "arraylength", ArrayLength.class), + ATHROW(0xbf, "athrow", AThrow.class), + CHECKCAST(0xc0, "checkcast", CheckCast.class), + INSTANCEOf(0xc1, "instanceof", InstanceOf.class), + MONITORENTER(0xc2, "monitorenter", MonitorEnter.class), + MONITOREXIT(0xc3, "monitorexit", MonitorExit.class), + MULTIANEWARRAY(0xc5, "multianewarray", MultiANewArray.class), + IFNULL(0xc6, "ifnull", IfNull.class), + IFNONNULL(0xc7, "ifnonnull", IfNonNull.class), + GOTO_W(0xc8, "goto_w", GotoW.class); + + private final int code; + private final String name; + private final Class clazz; + + InstructionType(int op, String name, Class clazz) + { + this.code = op; + this.name = name; + this.clazz = clazz; + } + + public int getCode() + { + return code; + } + + public String getName() + { + return name; + } + + public Class getInstructionClass() + { + return clazz; + } + + public static InstructionType findInstructionFromCode(int code) + { + for (InstructionType t : InstructionType.values()) + { + if (t.getCode() == code) + { + return t; + } + } + return null; + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Instructions.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Instructions.java new file mode 100644 index 0000000000..a528950d0a --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Instructions.java @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm.attributes.code; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import net.runelite.asm.attributes.Code; + +public class Instructions +{ + private final Code code; + private final List instructions = new ArrayList<>(); + private final Map labelMap = new HashMap<>(); + + public Instructions(Code code) + { + this.code = code; + } + + public Label createLabelFor(Instruction target) + { + return createLabelFor(target, false); + } + + public Label createLabelFor(Instruction target, boolean forceCreate) + { + assert target.getInstructions() == this; + assert instructions.contains(target); + + if (target instanceof Label) + { + return (Label) target; + } + + int i = instructions.indexOf(target); + if (i > 0) + { + Instruction before = instructions.get(i - 1); + + if (!forceCreate && before instanceof Label) + { + return (Label) before; + } + } + + Label label = new Label(this); + label.setLabel(new org.objectweb.asm.Label()); + instructions.add(i, label); + labelMap.put(label.getLabel(), label); + return label; + } + + public Label findLabel(org.objectweb.asm.Label l) + { + Label label = labelMap.get(l); + assert label != null; + return label; + } + + public Label findOrCreateLabel(org.objectweb.asm.Label l) + { + Label label = labelMap.get(l); + if (label != null) + { + return label; + } + + label = new Label(this, l); + labelMap.put(l, label); + + return label; + } + + public void rebuildLabels() + { + labelMap.clear(); + + // ow2 asm requires new Labels each time you write out a class + // with ClassWriter, or else it crytpically fails + for (Instruction i : instructions) + { + if (i instanceof Label) + { + org.objectweb.asm.Label label = new org.objectweb.asm.Label(); + ((Label) i).setLabel(label); + + labelMap.put(label, (Label) i); + } + } + } + + public List getInstructions() + { + return instructions; + } + + public void addInstruction(Instruction i) + { + assert i.getInstructions() == this; + instructions.add(i); + } + + public void addInstruction(int idx, Instruction i) + { + assert i.getInstructions() == this; + instructions.add(idx, i); + } + + public void remove(Instruction ins) + { + assert ins.getInstructions() == this; + ins.remove(); + instructions.remove(ins); + ins.setInstructions(null); + } + + public void clear() + { + for (Instruction ins : instructions) + { + ins.remove(); + ins.setInstructions(null); + } + instructions.clear(); + } + + public Code getCode() + { + return code; + } + + public void lookup() + { + for (Instruction i : instructions) + { + i.lookup(); + } + } + + public void regeneratePool() + { + for (Instruction i : instructions) + { + i.regeneratePool(); + } + } + + public int replace(Instruction oldi, Instruction newi) + { + assert oldi != newi; + + assert oldi.getInstructions() == this; + assert newi.getInstructions() == this; + + assert instructions.contains(oldi); + assert !instructions.contains(newi); + + int i = instructions.indexOf(oldi); + instructions.remove(oldi); + oldi.setInstructions(null); + instructions.add(i, newi); + + return i; + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Label.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Label.java new file mode 100644 index 0000000000..7f2cd70ffd --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Label.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm.attributes.code; + +import net.runelite.asm.attributes.code.instructions.NOP; +import org.objectweb.asm.MethodVisitor; + +public class Label extends NOP +{ + private org.objectweb.asm.Label label; + private Integer lineNumber; + + public Label(Instructions instructions) + { + super(instructions); + } + + public Label(Instructions instructions, org.objectweb.asm.Label label) + { + super(instructions); + this.label = label; + } + + @Override + public String toString() + { + String string; + + if (this.getInstructions() == null) + { + string = "label "; + } + else + { + Instruction next = next(); + + if (next == null) + { + string = "label with no next instruction"; + } + else + { + string = "label " + next.toString(); + } + } + + if (lineNumber != null) + { + string += " on line number " + lineNumber; + } + + return string; + } + + @Override + public Instruction clone() + { + Label l = (Label) super.clone(); + l.label = new org.objectweb.asm.Label(); + l.lineNumber = lineNumber; + return l; + } + + @Override + public void accept(MethodVisitor visitor) + { + visitor.visitLabel(label); + + if (lineNumber != null) + { + visitor.visitLineNumber(lineNumber, label); + } + } + + public org.objectweb.asm.Label getLabel() + { + return label; + } + + public void setLabel(org.objectweb.asm.Label label) + { + this.label = label; + } + + public void setLineNumber(Integer lineNumber) + { + this.lineNumber = lineNumber; + } + + public Instruction next() + { + Instructions ins = this.getInstructions(); + int i = ins.getInstructions().indexOf(this); + assert i != -1; + + Instruction next; + do + { + next = ins.getInstructions().get(i + 1); + ++i; + } + while (next instanceof Label); + + return next; + } +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemLayerMixin.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/LocalVariable.java similarity index 61% rename from runelite-mixins/src/main/java/net/runelite/mixins/RSItemLayerMixin.java rename to deobfuscator/src/main/java/net/runelite/asm/attributes/code/LocalVariable.java index 8b67d4d314..3956b453d1 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemLayerMixin.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/LocalVariable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, SomeoneWithAnInternetConnection + * Copyright (c) 2018 Morgan Lewis * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,37 +22,56 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.mixins; +package net.runelite.asm.attributes.code; -import java.awt.geom.Area; -import net.runelite.api.mixins.Inject; -import net.runelite.api.mixins.Mixin; -import net.runelite.rs.api.RSItemLayer; +import org.objectweb.asm.Label; -@Mixin(RSItemLayer.class) -public abstract class RSItemLayerMixin implements RSItemLayer +public class LocalVariable { - @Inject - private int itemLayerPlane; + private final String name; + private final String desc; + private final String signature; + private final Label start; + private final Label end; + private final int index; - @Inject - @Override - public int getPlane() + public LocalVariable(String name, String desc, String signature, Label start, Label end, int index) { - return itemLayerPlane; + this.name = name; + this.desc = desc; + this.signature = signature; + this.start = start; + this.end = end; + this.index = index; } - @Inject - @Override - public void setPlane(int plane) + public String getName() { - this.itemLayerPlane = plane; + return name; } - @Inject - @Override - public Area getClickbox() + public String getDesc() { - throw new UnsupportedOperationException(); + return desc; + } + + public String getSignature() + { + return signature; + } + + public Label getStart() + { + return start; + } + + public Label getEnd() + { + return end; + } + + public int getIndex() + { + return index; } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSIgnoreMixin.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Parameter.java similarity index 71% rename from runelite-mixins/src/main/java/net/runelite/mixins/RSIgnoreMixin.java rename to deobfuscator/src/main/java/net/runelite/asm/attributes/code/Parameter.java index 98bcd7b3b2..b42a41a4b5 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSIgnoreMixin.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/Parameter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Adam + * Copyright (c) 2018 Morgan Lewis * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,28 +22,37 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.mixins; +package net.runelite.asm.attributes.code; -import net.runelite.api.mixins.Inject; -import net.runelite.api.mixins.Mixin; -import net.runelite.rs.api.RSIgnore; -import net.runelite.rs.api.RSName; - -@Mixin(RSIgnore.class) -public abstract class RSIgnoreMixin implements RSIgnore +public class Parameter { - @Override - @Inject + private final String name; + private final int access; + private LocalVariable localVariable; + + public Parameter(String name, int access) + { + this.name = name; + this.access = access; + } + public String getName() { - return getRsName().getName(); + return name; } - @Override - @Inject - public String getPrevName() + public int getAccess() { - RSName prevName = getRsPrevName(); - return prevName == null ? null : prevName.getName(); + return access; + } + + public LocalVariable getLocalVariable() + { + return localVariable; + } + + public void setLocalVariable(LocalVariable localVariable) + { + this.localVariable = localVariable; } } diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/AdditionInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/AdditionInstruction.java new file mode 100644 index 0000000000..0fbb69ab1d --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/AdditionInstruction.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm.attributes.code.instruction.types; + +import net.runelite.asm.Field; +import net.runelite.asm.attributes.code.Instruction; +import net.runelite.asm.execution.InstructionContext; +import net.runelite.asm.execution.StackContext; +import net.runelite.deob.deobfuscators.mapping.MappingExecutorUtil; +import net.runelite.deob.deobfuscators.mapping.ParallelExecutorMapping; + +public interface AdditionInstruction extends MappableInstruction +{ + default InstructionContext findArrayLoad(InstructionContext ic1, InstructionContext ic2) + { + Instruction i1 = ic1.getInstruction(); + Instruction i2 = ic2.getInstruction(); + + if (i1 instanceof ArrayLoad && !(i2 instanceof ArrayLoad)) + { + return ic1; + } + if (i2 instanceof ArrayLoad && !(i1 instanceof ArrayLoad)) + { + return ic2; + } + + return null; + } + + @Override + default void map(ParallelExecutorMapping mappings, InstructionContext ctx, InstructionContext other) + { + /* lhs/rhs of addition instructions are randomally swapped, but + * we still map if each side is recognizable + * + * N.B. since the lhs/rhs of nested iadds can be swapped, and + * the mapper maps the first that it encounters, this can certainly + * attempt to map the wrong instructions even when mapping the correct + * method, so be careful. + */ + StackContext ctx1 = ctx.getPops().get(0); + StackContext ctx2 = ctx.getPops().get(1); + + StackContext other1 = other.getPops().get(0); + StackContext other2 = other.getPops().get(1); + + InstructionContext rc1 = ctx1.getPushed().resolve(ctx1); + InstructionContext rc2 = ctx2.getPushed().resolve(ctx2); //iaload + + InstructionContext ro1 = other1.getPushed().resolve(other1); + InstructionContext ro2 = other2.getPushed().resolve(other2); //iaload + + // There are a couple static final arrays that are only ever read from 1 or 2 places.. and never written + InstructionContext al1 = findArrayLoad(rc1, rc2); + InstructionContext al2 = findArrayLoad(ro1, ro2); + + if (al1 == null || al2 == null) + { + return; + } + + StackContext array1 = al1.getPops().get(1); + StackContext array2 = al2.getPops().get(1); + + InstructionContext field1 = array1.getPushed().resolve(array1); + InstructionContext field2 = array2.getPushed().resolve(array2); + + if (!(field1.getInstruction() instanceof GetFieldInstruction) || !(field2.getInstruction() instanceof GetFieldInstruction)) + { + return; + } + + GetFieldInstruction gf1 = (GetFieldInstruction) field1.getInstruction(); + GetFieldInstruction gf2 = (GetFieldInstruction) field2.getInstruction(); + + Field f1 = gf1.getMyField(); + Field f2 = gf2.getMyField(); + + if (f1 == null || f2 == null || !MappingExecutorUtil.isMaybeEqual(f1, f2)) + { + return; + } + + mappings.map((Instruction) this, f1, f2); + } + + @Override + default boolean isSame(InstructionContext thisIc, InstructionContext otherIc) + { + return this.getClass() == otherIc.getInstruction().getClass(); + } + + @Override + default boolean canMap(InstructionContext thisIc) + { + return true; + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayLoad.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayLoad.java new file mode 100644 index 0000000000..da196f0056 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayLoad.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm.attributes.code.instruction.types; + +import net.runelite.asm.attributes.code.Instruction; +import net.runelite.asm.execution.InstructionContext; +import net.runelite.asm.execution.StackContext; +import net.runelite.deob.deobfuscators.mapping.MappingExecutorUtil; +import net.runelite.deob.deobfuscators.mapping.ParallelExecutorMapping; + +public interface ArrayLoad extends MappableInstruction +{ + @Override + default void map(ParallelExecutorMapping mappings, InstructionContext ctx, InstructionContext other) + { + StackContext index1 = ctx.getPops().get(0), + index2 = other.getPops().get(0); + + InstructionContext ctx1 = MappingExecutorUtil.resolve(index1.getPushed(), index1), + ctx2 = MappingExecutorUtil.resolve(index2.getPushed(), index2); + + assert ctx1.getInstruction() instanceof GetFieldInstruction; + assert ctx2.getInstruction() instanceof GetFieldInstruction; + + GetFieldInstruction gf1 = (GetFieldInstruction) ctx1.getInstruction(); + GetFieldInstruction gf2 = (GetFieldInstruction) ctx2.getInstruction(); + mappings.map((Instruction) this, gf1.getMyField(), gf2.getMyField()); + } + + @Override + default boolean isSame(InstructionContext thisIc, InstructionContext otherIc) + { + if (thisIc.getInstruction().getType() != otherIc.getInstruction().getType()) + { + return false; + } + + StackContext index1 = thisIc.getPops().get(0), + index2 = otherIc.getPops().get(0); + + InstructionContext ctx1 = MappingExecutorUtil.resolve(index1.getPushed(), index1), + ctx2 = MappingExecutorUtil.resolve(index2.getPushed(), index2); + + assert ctx1.getInstruction() instanceof GetFieldInstruction; + assert ctx2.getInstruction() instanceof GetFieldInstruction; + + GetFieldInstruction gf1 = (GetFieldInstruction) ctx1.getInstruction(); + GetFieldInstruction gf2 = (GetFieldInstruction) ctx2.getInstruction(); + + return MappingExecutorUtil.isMaybeEqual(gf1.getMyField(), gf2.getMyField()); + } + + @Override + default boolean canMap(InstructionContext thisIc) + { + // assume that obfuscation can't remove a load with a variable + // index. map field access. + StackContext index = thisIc.getPops().get(0); + InstructionContext ctx = MappingExecutorUtil.resolve(index.getPushed(), index); + return ctx.getInstruction() instanceof GetFieldInstruction; + } +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayStoreInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayStoreInstruction.java new file mode 100644 index 0000000000..de019ce9e0 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayStoreInstruction.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.asm.attributes.code.instruction.types; + +public interface ArrayStoreInstruction extends MappableInstruction +{ + +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClanMember.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ComparisonInstruction.java similarity index 91% rename from runescape-api/src/main/java/net/runelite/rs/api/RSClanMember.java rename to deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ComparisonInstruction.java index ba65238fa4..25e0cdf1da 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClanMember.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ComparisonInstruction.java @@ -22,10 +22,10 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.rs.api; -import net.runelite.api.ClanMember; +package net.runelite.asm.attributes.code.instruction.types; -public interface RSClanMember extends RSChatPlayer, ClanMember +public interface ComparisonInstruction { + } diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ConversionInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ConversionInstruction.java new file mode 100644 index 0000000000..099b281725 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ConversionInstruction.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.asm.attributes.code.instruction.types; + +public interface ConversionInstruction +{ + +} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/DivisionInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/DivisionInstruction.java new file mode 100644 index 0000000000..f682748a65 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/DivisionInstruction.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.asm.attributes.code.instruction.types; + +import net.runelite.asm.Field; +import net.runelite.asm.attributes.code.Instruction; +import net.runelite.asm.execution.InstructionContext; +import net.runelite.asm.execution.StackContext; +import net.runelite.deob.deobfuscators.mapping.MappingExecutorUtil; +import net.runelite.deob.deobfuscators.mapping.ParallelExecutorMapping; + +public interface DivisionInstruction extends MappableInstruction +{ + @Override + default void map(ParallelExecutorMapping mappings, InstructionContext ctx, InstructionContext other) + { + StackContext s1 = ctx.getPops().get(0), + s2 = ctx.getPops().get(1); + + StackContext o1 = other.getPops().get(0), + o2 = other.getPops().get(1); + + InstructionContext i1 = MappingExecutorUtil.resolve(s1.getPushed(), s1); + InstructionContext i2 = MappingExecutorUtil.resolve(s2.getPushed(), s2); + + InstructionContext io1 = MappingExecutorUtil.resolve(o1.getPushed(), o1); + InstructionContext io2 = MappingExecutorUtil.resolve(o2.getPushed(), o2); + + if (i1.getInstruction() instanceof GetFieldInstruction && io1.getInstruction() instanceof GetFieldInstruction) + { + GetFieldInstruction f1 = (GetFieldInstruction) i1.getInstruction(); + GetFieldInstruction f2 = (GetFieldInstruction) io1.getInstruction(); + + Field fi1 = f1.getMyField(), fi2 = f2.getMyField(); + + if (fi1 != null && fi2 != null) + mappings.map((Instruction) this, fi1, fi2); + } + + if (i2.getInstruction() instanceof GetFieldInstruction && io2.getInstruction() instanceof GetFieldInstruction) + { + GetFieldInstruction f1 = (GetFieldInstruction) i2.getInstruction(); + GetFieldInstruction f2 = (GetFieldInstruction) io2.getInstruction(); + + Field fi1 = f1.getMyField(), fi2 = f2.getMyField(); + + if (fi1 != null && fi2 != null) + mappings.map((Instruction) this, fi1, fi2); + } + } + + @Override + default boolean isSame(InstructionContext thisIc, InstructionContext otherIc) + { + return this.getClass() == otherIc.getInstruction().getClass(); + } + + @Override + default boolean canMap(InstructionContext thisIc) + { + return true; + } +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/DupInstruction.java similarity index 67% rename from runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java rename to deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/DupInstruction.java index 3df00175f5..93ccb70e45 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/DupInstruction.java @@ -22,38 +22,30 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.rs.api; -import net.runelite.api.ObjectComposition; -import net.runelite.mapping.Import; +package net.runelite.asm.attributes.code.instruction.types; -public interface RSObjectComposition extends ObjectComposition +import java.util.List; +import net.runelite.asm.execution.InstructionContext; +import net.runelite.asm.execution.StackContext; + +public interface DupInstruction { - @Import("id") - @Override - int getId(); + StackContext getOriginal(StackContext sctx); + + StackContext getOtherBranch(StackContext sctx); - @Import("name") - @Override - String getName(); + /** + * get the duplicated stackcontexts (which is popped from this) + * @param ictx instruction context for this instruction + * @return + */ + List getDuplicated(InstructionContext ictx); - @Import("actions") - @Override - String[] getActions(); - - @Import("mapSceneId") - @Override - int getMapSceneId(); - - @Import("mapIconId") - @Override - int getMapIconId(); - - @Import("impostorIds") - @Override - int[] getImpostorIds(); - - @Import("getImpostor") - @Override - RSObjectComposition getImpostor(); + /** + * get the copied stackcontexts (pushed from this) + * @param ictx + * @return + */ + List getCopies(InstructionContext ictx); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfo1.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/FieldInstruction.java similarity index 86% rename from runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfo1.java rename to deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/FieldInstruction.java index 7f9519718b..e9ed4999ff 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfo1.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/FieldInstruction.java @@ -22,15 +22,15 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.rs.api; +package net.runelite.asm.attributes.code.instruction.types; -import net.runelite.mapping.Import; +import net.runelite.asm.pool.Field; -public interface RSCombatInfo1 +public interface FieldInstruction { - @Import("healthRatio") - int getHealthRatio(); + Field getField(); - @Import("health") - int getHealth(); + void setField(Field field); + + net.runelite.asm.Field getMyField(); } diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/GetFieldInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/GetFieldInstruction.java new file mode 100644 index 0000000000..f5a5af480a --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/GetFieldInstruction.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.asm.attributes.code.instruction.types; + +public interface GetFieldInstruction extends FieldInstruction +{ +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSDeque.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/IntInstruction.java similarity index 89% rename from runescape-api/src/main/java/net/runelite/rs/api/RSDeque.java rename to deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/IntInstruction.java index 9a0c2aa303..2bc361ef44 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSDeque.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/IntInstruction.java @@ -22,15 +22,12 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.rs.api; -import net.runelite.mapping.Import; +package net.runelite.asm.attributes.code.instruction.types; -public interface RSDeque +public interface IntInstruction { - @Import("current") - RSNode getCurrent(); + int getOperand(); - @Import("head") - RSNode getHead(); + void setOperand(int operand); } diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/InvokeInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/InvokeInstruction.java new file mode 100644 index 0000000000..9396f974de --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/InvokeInstruction.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.asm.attributes.code.instruction.types; + +import java.util.List; +import net.runelite.asm.Method; + +public interface InvokeInstruction extends MappableInstruction +{ + void removeParameter(int idx); + + net.runelite.asm.pool.Method getMethod(); + + void setMethod(net.runelite.asm.pool.Method method); + + List getMethods(); +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSHashTable.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/JumpingInstruction.java similarity index 83% rename from runescape-api/src/main/java/net/runelite/rs/api/RSHashTable.java rename to deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/JumpingInstruction.java index e1462ce1dd..fc1dda4b3a 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSHashTable.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/JumpingInstruction.java @@ -22,20 +22,16 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.rs.api; +package net.runelite.asm.attributes.code.instruction.types; -import net.runelite.api.HashTable; -import net.runelite.mapping.Import; +import java.util.List; +import net.runelite.asm.attributes.code.Label; -public interface RSHashTable extends HashTable +public interface JumpingInstruction { - @Import("get") - @Override - RSNode get(long value); + List