[{"data":1,"prerenderedAt":606},["ShallowReactive",2],{"navigation_docs":3,"trending-repo-Meloong-Git\u002FPCL":249,"page-views-\u002Ftrending\u002FMeloong-Git\u002FPCL":604},[4,29,104,124,194],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Start",false,"\u002Fstart","1.start",[10,14,19,24],{"title":11,"path":7,"stem":12,"icon":13},"What jscpd finds","1.start\u002Findex","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fstart\u002Finstallation","1.start\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quickstart","\u002Fstart\u002Fquickstart","1.start\u002F3.quickstart","i-lucide-rocket",{"title":25,"path":26,"stem":27,"icon":28},"Configuration basics","\u002Fstart\u002Fconfiguration","1.start\u002F4.configuration","i-lucide-settings-2",{"title":30,"icon":6,"path":31,"stem":32,"children":33,"page":6},"Guides","\u002Fguides","2.guides",[34,39,44,49,54,59,64,69,74,79,84,89,94,99],{"title":35,"path":36,"stem":37,"icon":38},"Use jscpd in CI","\u002Fguides\u002Fci","2.guides\u002F01.ci","i-lucide-github",{"title":40,"path":41,"stem":42,"icon":43},"Pre-commit hooks","\u002Fguides\u002Fpre-commit","2.guides\u002F02.pre-commit","i-lucide-git-commit",{"title":45,"path":46,"stem":47,"icon":48},"Fail only on new duplication","\u002Fguides\u002Fbaseline","2.guides\u002F03.baseline","i-lucide-git-compare",{"title":50,"path":51,"stem":52,"icon":53},"Monorepos","\u002Fguides\u002Fmonorepos","2.guides\u002F04.monorepos","i-lucide-folder-tree",{"title":55,"path":56,"stem":57,"icon":58},"Cross-format detection","\u002Fguides\u002Fcross-format","2.guides\u002F05.cross-format","i-lucide-layers",{"title":60,"path":61,"stem":62,"icon":63},"Agents","\u002Fguides\u002Fagents","2.guides\u002F06.agents","i-lucide-cpu",{"title":65,"path":66,"stem":67,"icon":68},"Editors","\u002Fguides\u002Feditors","2.guides\u002F07.editors","i-lucide-code",{"title":70,"path":71,"stem":72,"icon":73},"Duplication over git history","\u002Fguides\u002Fhistory","2.guides\u002F08.history","i-lucide-chart-no-axes-combined",{"title":75,"path":76,"stem":77,"icon":78},"Dashboard and health score","\u002Fguides\u002Fdashboard","2.guides\u002F09.dashboard","i-lucide-layout-dashboard",{"title":80,"path":81,"stem":82,"icon":83},"Dead code","\u002Fguides\u002Fdead-code","2.guides\u002F10.dead-code","i-lucide-ghost",{"title":85,"path":86,"stem":87,"icon":88},"Comparing two codebases","\u002Fguides\u002Fcompare","2.guides\u002F11.compare","i-lucide-git-compare-arrows",{"title":90,"path":91,"stem":92,"icon":93},"Semantic clones","\u002Fguides\u002Fsemantic-clones","2.guides\u002F12.semantic-clones","i-lucide-brain-circuit",{"title":95,"path":96,"stem":97,"icon":98},"Similar functions","\u002Fguides\u002Fsimilarity","2.guides\u002F13.similarity","i-lucide-list-tree",{"title":100,"path":101,"stem":102,"icon":103},"Boundaries","\u002Fguides\u002Fboundaries","2.guides\u002F14.boundaries","i-lucide-fence",{"title":105,"icon":6,"path":106,"stem":107,"children":108,"page":6},"Concepts","\u002Fconcepts","3.concepts",[109,114,119],{"title":110,"path":111,"stem":112,"icon":113},"Types of code clones","\u002Fconcepts\u002Fclone-types","3.concepts\u002F1.clone-types","i-lucide-copy",{"title":115,"path":116,"stem":117,"icon":118},"How detection works","\u002Fconcepts\u002Fhow-detection-works","3.concepts\u002F2.how-detection-works","i-lucide-scan-search",{"title":120,"path":121,"stem":122,"icon":123},"The health score","\u002Fconcepts\u002Fhealth-score","3.concepts\u002F3.health-score","i-lucide-heart-pulse",{"title":125,"icon":6,"path":126,"stem":127,"children":128,"page":6},"Reference","\u002Freference","4.reference",[129,134,139,144,181,186,190],{"title":130,"path":131,"stem":132,"icon":133},"CLI options","\u002Freference\u002Fcli","4.reference\u002F1.cli","i-lucide-terminal",{"title":135,"path":136,"stem":137,"icon":138},"The config file","\u002Freference\u002Fconfig-file","4.reference\u002F2.config-file","i-lucide-settings",{"title":140,"path":141,"stem":142,"icon":143},"Exit codes","\u002Freference\u002Fexit-codes","4.reference\u002F3.exit-codes","i-lucide-log-out",{"title":145,"icon":6,"path":146,"stem":147,"children":148},"Reporters","\u002Freference\u002Freporters","4.reference\u002F4.reporters\u002Findex",[149,151,156,161,166,171,176],{"title":145,"path":146,"stem":147,"icon":150},"i-lucide-file-chart-column",{"title":152,"path":153,"stem":154,"icon":155},"HTML reporter","\u002Freference\u002Freporters\u002Fhtml","4.reference\u002F4.reporters\u002F2.html","i-lucide-file-code",{"title":157,"path":158,"stem":159,"icon":160},"JSON reporter","\u002Freference\u002Freporters\u002Fjson","4.reference\u002F4.reporters\u002F3.json","i-lucide-braces",{"title":162,"path":163,"stem":164,"icon":165},"Badge reporter","\u002Freference\u002Freporters\u002Fbadge","4.reference\u002F4.reporters\u002F4.badge","i-lucide-award",{"title":167,"path":168,"stem":169,"icon":170},"SARIF reporter","\u002Freference\u002Freporters\u002Fsarif","4.reference\u002F4.reporters\u002F5.sarif","i-lucide-shield-check",{"title":172,"path":173,"stem":174,"icon":175},"CodeClimate reporter","\u002Freference\u002Freporters\u002Fcodeclimate","4.reference\u002F4.reporters\u002F6.codeclimate","i-lucide-flag-triangle-right",{"title":177,"path":178,"stem":179,"icon":180},"OpenMetrics reporter","\u002Freference\u002Freporters\u002Fopenmetrics","4.reference\u002F4.reporters\u002F7.openmetrics","i-lucide-activity",{"title":182,"path":183,"stem":184,"icon":185},"Supported formats","\u002Freference\u002Fsupported-formats","4.reference\u002F5.supported-formats","i-lucide-languages",{"title":187,"path":188,"stem":189,"icon":38},"GitHub Action","\u002Freference\u002Fgithub-action","4.reference\u002F6.github-action",{"title":191,"path":192,"stem":193,"icon":68},"Rust crates","\u002Freference\u002Frust-crates","4.reference\u002F7.rust-crates",{"title":195,"icon":6,"path":196,"stem":197,"children":198,"page":6},"Project","\u002Fproject","5.project",[199,204,209,214,239,244],{"title":200,"path":201,"stem":202,"icon":203},"Changelog","\u002Fproject\u002Fchangelog","5.project\u002F1.changelog","i-lucide-scroll-text",{"title":205,"path":206,"stem":207,"icon":208},"Migrating from v4 to v5","\u002Fproject\u002Fmigration","5.project\u002F2.migration","i-lucide-arrow-right-left",{"title":210,"path":211,"stem":212,"icon":213},"jscpd v4 (TypeScript)","\u002Fproject\u002Fv4","5.project\u002F3.v4","i-simple-icons-typescript",{"title":215,"icon":6,"path":216,"stem":217,"children":218},"Benchmarks","\u002Fproject\u002Fbenchmarks","5.project\u002F4.benchmarks\u002Findex",[219,221,226,230,235],{"title":215,"path":216,"stem":217,"icon":220},"i-lucide-gauge",{"title":222,"path":223,"stem":224,"icon":225},"Detection Speed","\u002Fproject\u002Fbenchmarks\u002Fdetection-speed","5.project\u002F4.benchmarks\u002F2.detection-speed","i-lucide-zap",{"title":227,"path":228,"stem":229,"icon":58},"Multi-Format Detection","\u002Fproject\u002Fbenchmarks\u002Fcross-format","5.project\u002F4.benchmarks\u002F3.cross-format",{"title":231,"path":232,"stem":233,"icon":234},"AI Token Efficiency","\u002Fproject\u002Fbenchmarks\u002Fai-token-efficiency","5.project\u002F4.benchmarks\u002F4.ai-token-efficiency","i-lucide-sparkles",{"title":236,"path":237,"stem":238,"icon":93},"Embedding Models","\u002Fproject\u002Fbenchmarks\u002Fembedding-models","5.project\u002F4.benchmarks\u002F5.embedding-models",{"title":240,"path":241,"stem":242,"icon":243},"Research","\u002Fproject\u002Fresearch","5.project\u002F5.research","i-lucide-graduation-cap",{"title":245,"path":246,"stem":247,"icon":248},"Articles","\u002Fproject\u002Farticles","5.project\u002F6.articles","i-lucide-newspaper",{"name":250,"url":251,"appearances":252,"latest":268},"Meloong-Git\u002FPCL","https:\u002F\u002Fgithub.com\u002FMeloong-Git\u002FPCL",[253],{"date":254,"rank":255,"stars":256,"starsToday":257,"headSha":258,"sources":259,"lines":260,"clones":261,"duplicatedLines":262,"percentage":263,"codePercentage":264,"codeSources":265,"healthScore":266,"healthGrade":267},"2026-10-23",5,8765,119,"6b9a50df911c9d68b69b24c979efba477fb14b67",127,76499,122,1527,2,3.41,115,49.6,"D",{"date":254,"generatedAt":269,"name":250,"url":251,"description":270,"language":271,"stars":256,"starsToday":257,"defaultBranch":272,"headSha":258,"durationMs":273,"total":274,"formats":278,"topClones":310,"code":464,"health":526,"complexity":550,"deadCode":603},"2026-10-23T05:28:49.788Z","Minecraft 启动器 Plain Craft Launcher（PCL）。","Visual Basic .NET","main",1248,{"sources":259,"lines":260,"tokens":275,"clones":261,"duplicatedLines":262,"duplicatedTokens":276,"percentage":263,"percentageTokens":277},485588,11074,2.28,[279,286,293,297,301,304,307],{"format":280,"sources":281,"lines":282,"clones":283,"duplicatedLines":284,"percentage":285},"vbnet",106,43093,121,1500,3.48,{"format":287,"sources":288,"lines":289,"clones":290,"duplicatedLines":291,"percentage":292},"yaml",7,265,1,27,10.19,{"format":294,"sources":290,"lines":295,"clones":296,"duplicatedLines":296,"percentage":296},"txt",31511,0,{"format":298,"sources":299,"lines":300,"clones":296,"duplicatedLines":296,"percentage":296},"csharp",9,921,{"format":302,"sources":290,"lines":303,"clones":296,"duplicatedLines":296,"percentage":296},"json",423,{"format":305,"sources":263,"lines":306,"clones":296,"duplicatedLines":296,"percentage":296},"editorconfig",269,{"format":308,"sources":290,"lines":309,"clones":296,"duplicatedLines":296,"percentage":296},"markdown",17,[311,346,370,391,401,415,425,436,446,454],{"format":280,"lines":312,"tokens":313,"first":314,"others":318,"copies":329,"excerpt":330,"excerptSecond":342,"kind":345},10,145,{"name":315,"start":316,"end":317},"Plain Craft Launcher 2\u002FControls\u002FMyMsg\u002FMyMsgInput.xaml.vb",40,49,[319,323,326],{"name":320,"start":321,"end":322},"Plain Craft Launcher 2\u002FControls\u002FMyMsg\u002FMyMsgSelect.xaml.vb",47,56,{"name":324,"start":325,"end":321},"Plain Craft Launcher 2\u002FControls\u002FMyMsg\u002FMyMsgText.xaml.vb",38,{"name":327,"start":328,"end":325},"Plain Craft Launcher 2\u002FPages\u002FPageLaunch\u002FMyMsgLogin.xaml.vb",29,4,{"lines":331,"total":312},[332,333,334,335,336,337,338,339,340,341],"'动画","Opacity = 0","AniStart(AaColor(FrmMain.PanMsg, Grid.BackgroundProperty, If(MyConverter.IsWarn, New MyColor(140, 80, 0, 0), New MyColor(90, 0, 0, 0)) - FrmMain.PanMsg.Backgro…","AniStart({","    AaOpacity(Me, 1, 120, 60),","    AaDouble(Sub(i) TransformPos.Y += i, -TransformPos.Y, 300, 60, New AniEaseOutBack(AniEasePower.Weak)),","    AaDouble(Sub(i) TransformRotate.Angle += i, -TransformRotate.Angle, 300, 60, New AniEaseOutFluent(AniEasePower.Weak))","}, \"MyMsgBox \" & Uuid)","'记录日志","Logger.Info($\"输入弹窗：{LabTitle.Text}\")",{"lines":343,"total":312},[332,333,334,335,336,337,338,339,340,344],"Logger.Info($\"选择弹窗：{LabTitle.Text}\")","code",{"format":280,"lines":347,"tokens":348,"first":349,"others":353,"copies":263,"excerpt":358,"kind":345},28,398,{"name":350,"start":351,"end":352},"Plain Craft Launcher 2\u002FPages\u002FPageInstance\u002FPageInstanceSetup.xaml.vb",116,143,[354],{"name":355,"start":356,"end":357},"Plain Craft Launcher 2\u002FPages\u002FPageSetup\u002FPageSetupLaunch.xaml.vb",147,174,{"lines":359,"total":347},[360,361,362,363,364,365,366,367,368,369],"Dim RamGame As Double = Math.Round(GetRam(PageInstanceLeft.Instance), 5)","Dim RamTotal As Double = Math.Round(My.Computer.Info.TotalPhysicalMemory \u002F 1024 \u002F 1024 \u002F 1024, 1)","Dim RamAvailable As Double = Math.Round(My.Computer.Info.AvailablePhysicalMemory \u002F 1024 \u002F 1024 \u002F 1024, 1)","Dim RamGameActual As Double = Math.Round(Math.Min(RamGame, RamAvailable), 5)","Dim RamUsed As Double = Math.Round(RamTotal - RamAvailable, 5)","Dim RamEmpty As Double = Math.Round((RamTotal - RamUsed - RamGame).Clamp(0, 1000), 1)","'设置最大可用内存","If RamTotal \u003C= 1.5 Then","    SliderRamCustom.MaxValue = Math.Max(Math.Floor((RamTotal - 0.3) \u002F 0.1), 1)","ElseIf RamTotal \u003C= 8 Then",{"format":280,"lines":317,"tokens":371,"first":372,"others":375,"copies":263,"excerpt":379,"kind":345},294,{"name":350,"start":373,"end":374},260,308,[376],{"name":355,"start":377,"end":378},288,336,{"lines":380,"total":317},[381,382,383,384,385,386,387,388,389,390],"If Instance IsNot Nothing AndAlso Not Instance.IsLoaded Then Instance.Load()","If Instance IsNot Nothing AndAlso Instance.Modable Then","    '可安装 Mod 的版本","    Dim ModDir = DirectoryUtils.GetInfo(Instance.PathIndie & \"mods\\\")","    Dim ModCount As Integer = If(ModDir.Exists, ModDir.GetFiles.Count(Function(f) {\".jar\", \".zip\", \".litemod\"}.Contains(f.Extension.Lower)), 0)","    RamMininum = 0.5 + ModCount \u002F 150","    RamTarget1 = 1.5 + ModCount \u002F 90","    RamTarget2 = 2.7 + ModCount \u002F 50","    RamTarget3 = 4.5 + ModCount \u002F 25","ElseIf Instance IsNot Nothing AndAlso Instance.Version.HasOptiFine Then",{"format":280,"lines":392,"tokens":393,"first":394,"others":397,"copies":263,"kind":345},6,293,{"name":395,"start":317,"end":396},"Plain Craft Launcher 2\u002FPages\u002FPageLaunch\u002FPageLaunchRight.xaml.vb",54,[398],{"name":395,"start":399,"end":400},58,63,{"format":280,"lines":288,"tokens":402,"first":403,"others":407,"copies":414,"kind":345},120,{"name":404,"start":405,"end":406},"Plain Craft Launcher 2\u002FModules\u002FMinecraft\u002FModModpack.vb",315,321,[408,411],{"name":404,"start":409,"end":410},652,659,{"name":404,"start":412,"end":413},738,745,3,{"format":280,"lines":416,"tokens":417,"first":418,"others":421,"copies":263,"kind":345},19,214,{"name":404,"start":419,"end":420},312,330,[422],{"name":404,"start":423,"end":424},445,464,{"format":280,"lines":426,"tokens":427,"first":428,"others":432,"copies":263,"kind":345},18,211,{"name":429,"start":430,"end":431},"Plain Craft Launcher 2\u002FModules\u002FMinecraft\u002FModDownload.vb",1032,1049,[433],{"name":429,"start":434,"end":435},1060,1077,{"format":280,"lines":437,"tokens":438,"first":439,"others":442,"copies":263,"kind":345},23,208,{"name":315,"start":440,"end":441},52,74,[443],{"name":320,"start":444,"end":445},59,81,{"format":280,"lines":426,"tokens":447,"first":448,"others":450,"copies":263,"kind":345},193,{"name":315,"start":449,"end":441},57,[451],{"name":324,"start":452,"end":453},55,72,{"format":280,"lines":328,"tokens":455,"first":456,"others":460,"copies":263,"kind":345},184,{"name":457,"start":458,"end":459},"Plain Craft Launcher 2\u002FControls\u002FMyPageRight.vb",64,92,[461],{"name":457,"start":462,"end":463},113,141,{"sources":265,"lines":465,"tokens":466,"clones":283,"duplicatedLines":284,"duplicatedTokens":467,"percentage":264,"percentageTokens":468,"formats":469,"topClones":472,"generated":524},44014,284378,10993,3.87,[470,471],{"format":280,"sources":281,"lines":282,"clones":283,"duplicatedLines":284,"percentage":285},{"format":298,"sources":299,"lines":300,"clones":296,"duplicatedLines":296,"percentage":296},[473,483,489,495,499,504,508,512,516,520],{"format":280,"lines":312,"tokens":313,"first":474,"others":475,"copies":329,"excerpt":479,"excerptSecond":481,"kind":345},{"name":315,"start":316,"end":317},[476,477,478],{"name":320,"start":321,"end":322},{"name":324,"start":325,"end":321},{"name":327,"start":328,"end":325},{"lines":480,"total":312},[332,333,334,335,336,337,338,339,340,341],{"lines":482,"total":312},[332,333,334,335,336,337,338,339,340,344],{"format":280,"lines":347,"tokens":348,"first":484,"others":485,"copies":263,"excerpt":487,"kind":345},{"name":350,"start":351,"end":352},[486],{"name":355,"start":356,"end":357},{"lines":488,"total":347},[360,361,362,363,364,365,366,367,368,369],{"format":280,"lines":317,"tokens":371,"first":490,"others":491,"copies":263,"excerpt":493,"kind":345},{"name":350,"start":373,"end":374},[492],{"name":355,"start":377,"end":378},{"lines":494,"total":317},[381,382,383,384,385,386,387,388,389,390],{"format":280,"lines":392,"tokens":393,"first":496,"others":497,"copies":263,"kind":345},{"name":395,"start":317,"end":396},[498],{"name":395,"start":399,"end":400},{"format":280,"lines":288,"tokens":402,"first":500,"others":501,"copies":414,"kind":345},{"name":404,"start":405,"end":406},[502,503],{"name":404,"start":409,"end":410},{"name":404,"start":412,"end":413},{"format":280,"lines":416,"tokens":417,"first":505,"others":506,"copies":263,"kind":345},{"name":404,"start":419,"end":420},[507],{"name":404,"start":423,"end":424},{"format":280,"lines":426,"tokens":427,"first":509,"others":510,"copies":263,"kind":345},{"name":429,"start":430,"end":431},[511],{"name":429,"start":434,"end":435},{"format":280,"lines":437,"tokens":438,"first":513,"others":514,"copies":263,"kind":345},{"name":315,"start":440,"end":441},[515],{"name":320,"start":444,"end":445},{"format":280,"lines":426,"tokens":447,"first":517,"others":518,"copies":263,"kind":345},{"name":315,"start":449,"end":441},[519],{"name":324,"start":452,"end":453},{"format":280,"lines":328,"tokens":455,"first":521,"others":522,"copies":263,"kind":345},{"name":457,"start":458,"end":459},[523],{"name":457,"start":462,"end":463},{"files":296,"minified":296,"sample":525},[],{"score":266,"grade":267,"size":527,"dimensions":529,"skipped":546},{"lines":465,"files":265,"class":528},"M",[530,540],{"id":531,"source":532,"value":533,"adjusted":533,"lines":284,"halfLife":534,"formats":535,"excluded":536,"weight":290,"score":539},"duplication","jscpd",3.4,8.5,[280,298],[537,538],"text","data",75.7,{"id":541,"source":532,"value":542,"adjusted":445,"lines":543,"halfLife":544,"weight":290,"score":545},"complexity",83.8,36865,50,32.5,[547],{"id":548,"reason":549},"dead-code","no JavaScript, TypeScript, Python or compiler-checked Rust files",{"total":551,"mean":552,"files":553},11084,96.4,[554,559,564,569,574,579,584,589,594,599],{"path":555,"complexity":556,"lines":557,"bytes":558},"Plain Craft Launcher 2\u002FModules\u002FMinecraft\u002FModLaunch.vb",628,2221,122729,{"path":560,"complexity":561,"lines":562,"bytes":563},"Plain Craft Launcher 2\u002FModules\u002FMinecraft\u002FModMinecraft.vb",625,2153,115701,{"path":565,"complexity":566,"lines":567,"bytes":568},"Plain Craft Launcher 2\u002FPages\u002FPageDownload\u002FModDownloadLib.vb",505,2176,123323,{"path":570,"complexity":571,"lines":572,"bytes":573},"Plain Craft Launcher 2\u002FModules\u002FBase\u002FModNet.vb",488,1933,95212,{"path":575,"complexity":576,"lines":577,"bytes":578},"Plain Craft Launcher 2\u002FFormMain.xaml.vb",486,1727,88345,{"path":580,"complexity":581,"lines":582,"bytes":583},"Plain Craft Launcher 2\u002FModules\u002FMinecraft\u002FModCrash.vb",482,1122,77776,{"path":585,"complexity":586,"lines":587,"bytes":588},"Plain Craft Launcher 2\u002FPages\u002FPageDownload\u002FPageDownloadModify.vb",365,727,49044,{"path":590,"complexity":591,"lines":592,"bytes":593},"Plain Craft Launcher 2\u002FPages\u002FPageDownload\u002FPageDownloadInstall.xaml.vb",325,1199,56564,{"path":595,"complexity":596,"lines":597,"bytes":598},"Plain Craft Launcher 2\u002FModules\u002FResource\u002FResourceProject.vb",313,711,36193,{"path":404,"complexity":600,"lines":601,"bytes":602},264,866,55414,null,{"\u002Ftrending\u002FMeloong-Git\u002FPCL":605},{"views":296,"visits":296},1792739188433]