From 3a881addd2cdd797058c2a955d075674a094eeb4 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 11 Apr 2016 23:28:40 +0200 Subject: [PATCH] Rearranged stuff --- .metadata/.bak_0.log | 14220 ---------------- .metadata/.lock | 0 .metadata/.log | 1134 -- .metadata/.mylyn/.taskListIndex/segments.gen | Bin 20 -> 0 bytes .metadata/.mylyn/.taskListIndex/segments_1 | Bin 32 -> 0 bytes .metadata/.mylyn/.tasks.xml.zip | Bin 250 -> 0 bytes .metadata/.mylyn/repositories.xml.zip | Bin 435 -> 0 bytes .metadata/.mylyn/tasks.xml.zip | Bin 250 -> 0 bytes .../1/a0191b15d23e001518fa86d7ae2a1cf8 | 374 - .../1/b070e46d45a600151c15ab42d7919fee | 116 - .../10/20fd03d549a600151c15ab42d7919fee | 355 - .../10/302feacd41a600151c15ab42d7919fee | 603 - .../12/a077bfc949a600151c15ab42d7919fee | 125 - .../12/b09714c2cf3e001518fa86d7ae2a1cf8 | 362 - .../13/b0a0fbb849a600151c15ab42d7919fee | 355 - .../14/20b7f4c2d23e001518fa86d7ae2a1cf8 | 215 - .../15/a0689143d43e001518fa86d7ae2a1cf8 | 221 - .../16/303c161945a600151c15ab42d7919fee | 110 - .../17/70f2199141a600151c15ab42d7919fee | 597 - .../19/c0e42302ce3e001518fa86d7ae2a1cf8 | 354 - .../1a/c0bedf60e640001514c09dece48b36c7 | 73 - .../1c/50b35f3bd23e001518fa86d7ae2a1cf8 | 376 - .../1c/a0ecf93ad23e001518fa86d7ae2a1cf8 | 376 - .../1d/709a3bde2d53001516cdaaef55e27ba4 | 15 - .../1e/20ce3447d43e001518fa86d7ae2a1cf8 | 224 - .../1e/606a09eede40001514c09dece48b36c7 | 297 - .../1e/a0477e13d43e001518fa86d7ae2a1cf8 | 220 - .../1e/b057e861ce3e001518fa86d7ae2a1cf8 | 31 - .../1e/d0e4168be540001514c09dece48b36c7 | 71 - .../1f/203f7772d23e001518fa86d7ae2a1cf8 | 380 - .../2/008fa000f34500151ebce83b3129f79d | 78 - .../2/20385cfb44a600151c15ab42d7919fee | 106 - .../2/a06adb06d43e001518fa86d7ae2a1cf8 | 219 - .../20/2004d51d42a600151c15ab42d7919fee | 371 - .../20/802a22d2de40001514c09dece48b36c7 | 71 - .../20/b08b3094cf3e001518fa86d7ae2a1cf8 | 364 - .../21/20cc239649a600151c15ab42d7919fee | 355 - .../21/c0a02994e640001514c09dece48b36c7 | 74 - .../22/408c617d44a600151c15ab42d7919fee | 368 - .../22/40feff6ce640001514c09dece48b36c7 | 73 - .../22/a091cfc4d23e001518fa86d7ae2a1cf8 | 215 - .../23/a0c7c72cd33e001518fa86d7ae2a1cf8 | 216 - .../24/c0d763f341a600151c15ab42d7919fee | 371 - .../25/3067ea8bd13e001518fa86d7ae2a1cf8 | 326 - .../25/c05ce792e640001514c09dece48b36c7 | 73 - .../26/20fee89fce3e001518fa86d7ae2a1cf8 | 360 - .../26/a0111a40d33e001518fa86d7ae2a1cf8 | 215 - .../27/9011edbed23e001518fa86d7ae2a1cf8 | 215 - .../27/f08a8910cf3e001518fa86d7ae2a1cf8 | 362 - .../28/309e6352d33e001518fa86d7ae2a1cf8 | 216 - .../29/40e1da43e340001514c09dece48b36c7 | 295 - .../29/50338b22e340001514c09dece48b36c7 | 298 - .../2a/20868515d03e001518fa86d7ae2a1cf8 | 363 - .../2b/702271ffde40001514c09dece48b36c7 | 297 - .../2c/80f4cccb41a600151c15ab42d7919fee | 599 - .../2e/90fc2ebfd23e001518fa86d7ae2a1cf8 | 215 - .../2f/30aed98449a600151c15ab42d7919fee | 355 - .../3/004e1951d8a500151c15ab42d7919fee | 596 - .../30/20a0c374d23e001518fa86d7ae2a1cf8 | 345 - .../30/60f899dc2d53001516cdaaef55e27ba4 | 15 - .../31/20e2516b49a600151c15ab42d7919fee | 122 - .../31/c0e1dbcdcf3e001518fa86d7ae2a1cf8 | 363 - .../32/907f4f6a44a600151c15ab42d7919fee | 367 - .../34/40f80735d5a500151c15ab42d7919fee | 370 - .../34/b097b71bce3e001518fa86d7ae2a1cf8 | 354 - .../37/20e61fc4d13e001518fa86d7ae2a1cf8 | 370 - .../37/c0f63c61e240001514c09dece48b36c7 | 451 - .../38/209c0ada49a600151c15ab42d7919fee | 353 - .../38/a0523ba549a600151c15ab42d7919fee | 125 - .../38/a0f3a0e9cf3e001518fa86d7ae2a1cf8 | 197 - .../39/2006034ad03e001518fa86d7ae2a1cf8 | 201 - .../3b/30bdb825cd3e001518fa86d7ae2a1cf8 | 25 - .../3b/50ce8dd8d4a500151c15ab42d7919fee | 369 - .../3c/205637bed23e001518fa86d7ae2a1cf8 | 215 - .../3c/d00a0e58e240001514c09dece48b36c7 | 450 - .../3e/6022916ee240001514c09dece48b36c7 | 452 - .../3f/a0709f19cf3e001518fa86d7ae2a1cf8 | 362 - .../4/b030d637cd3e001518fa86d7ae2a1cf8 | 29 - .../41/20453fde49a600151c15ab42d7919fee | 353 - .../41/c0d7140345a600151c15ab42d7919fee | 112 - .../44/3078a0bed23e001518fa86d7ae2a1cf8 | 215 - .../44/b01fe45045a600151c15ab42d7919fee | 113 - .../46/a0e24f1ad43e001518fa86d7ae2a1cf8 | 221 - .../47/209354bad13e001518fa86d7ae2a1cf8 | 370 - .../47/20a74d8ad13e001518fa86d7ae2a1cf8 | 368 - .../49/203c0b4ad33e001518fa86d7ae2a1cf8 | 215 - .../49/a04d8dc3d23e001518fa86d7ae2a1cf8 | 215 - .../49/b0556e29ce3e001518fa86d7ae2a1cf8 | 355 - .../4a/20662b05d33e001518fa86d7ae2a1cf8 | 215 - .../4b/203dd097ce3e001518fa86d7ae2a1cf8 | 358 - .../4b/40b1bfa8755d001515f3fd278c34f57e | 465 - .../4c/30becb7849a600151c15ab42d7919fee | 122 - .../4d/a0ee15dcd13e001518fa86d7ae2a1cf8 | 373 - .../4d/c045effe4ba600151c15ab42d7919fee | 353 - .../53/202e6b364ba600151c15ab42d7919fee | 603 - .../53/40b494f5e540001514c09dece48b36c7 | 72 - .../53/d0c1dad6e440001514c09dece48b36c7 | 296 - .../55/c0fc6b25cd3e001518fa86d7ae2a1cf8 | 24 - .../56/205a1cf9d13e001518fa86d7ae2a1cf8 | 374 - .../56/f06dfb95d8a500151c15ab42d7919fee | 596 - .../5b/008c7edd2d53001516cdaaef55e27ba4 | 16 - .../5b/e0d83cf9de40001514c09dece48b36c7 | 297 - .../5c/a03b3ea1d33e001518fa86d7ae2a1cf8 | 219 - .../5d/a0a6c2d0d23e001518fa86d7ae2a1cf8 | 215 - .../5d/a0befd81d33e001518fa86d7ae2a1cf8 | 216 - .../5e/c0d6d38be640001514c09dece48b36c7 | 73 - .../5f/2061341bd23e001518fa86d7ae2a1cf8 | 375 - .../5f/50257859e640001514c09dece48b36c7 | 72 - .../5f/c0b28923ce3e001518fa86d7ae2a1cf8 | 355 - .../6/2029114dd33e001518fa86d7ae2a1cf8 | 216 - .../6/208a8252ce3e001518fa86d7ae2a1cf8 | 31 - .../6/a032431fd23e001518fa86d7ae2a1cf8 | 375 - .../61/b0779e98d03e001518fa86d7ae2a1cf8 | 205 - .../63/206c2677ce3e001518fa86d7ae2a1cf8 | 358 - .../63/90beaa3cd8a500151c15ab42d7919fee | 596 - .../63/d06551420941001514c09dece48b36c7 | 74 - .../64/202fdd3acd3e001518fa86d7ae2a1cf8 | 31 - .../64/20a74791d03e001518fa86d7ae2a1cf8 | 205 - .../64/90cec71ead9e0015192daf17db672400 | 595 - .../65/5094853442a600151c15ab42d7919fee | 364 - .../67/c0952ea8e240001514c09dece48b36c7 | 298 - .../6a/20a2e34ad03e001518fa86d7ae2a1cf8 | 201 - .../6a/406f8416e340001514c09dece48b36c7 | 298 - .../6b/700669952d53001516cdaaef55e27ba4 | 13 - .../6c/20b08dced03e001518fa86d7ae2a1cf8 | 211 - .../6c/500072fecd3e001518fa86d7ae2a1cf8 | 351 - .../6c/506c7d4ee140001514c09dece48b36c7 | 71 - .../6e/60f4f3db2d53001516cdaaef55e27ba4 | 14 - .../6e/a01e1adad13e001518fa86d7ae2a1cf8 | 373 - .../6f/10014ab944a600151c15ab42d7919fee | 90 - .../6f/d0569c5ae240001514c09dece48b36c7 | 451 - .../7/d0a7c5c8ce3e001518fa86d7ae2a1cf8 | 361 - .../71/20d5de7b4aa600151c15ab42d7919fee | 364 - .../71/b09765e7d13e001518fa86d7ae2a1cf8 | 373 - .../73/b05d0d564ca600151c15ab42d7919fee | 602 - .../75/200e61c5d03e001518fa86d7ae2a1cf8 | 209 - .../75/20bc5301d13e001518fa86d7ae2a1cf8 | 222 - .../75/407eccf8d0a500151c15ab42d7919fee | 89 - .../75/a0acffa2d13e001518fa86d7ae2a1cf8 | 368 - .../76/20df8b6f45a600151c15ab42d7919fee | 117 - .../76/800c9206d5a500151c15ab42d7919fee | 370 - .../76/b054e00b4aa600151c15ab42d7919fee | 603 - .../77/10dec4cbce3e001518fa86d7ae2a1cf8 | 360 - .../78/a0991cb7d13e001518fa86d7ae2a1cf8 | 370 - .../78/c0c9ec2dd8a500151c15ab42d7919fee | 595 - .../7c/3014764dcd3e001518fa86d7ae2a1cf8 | 31 - .../7c/a0934f14cf3e001518fa86d7ae2a1cf8 | 362 - .../7d/a005617fd13e001518fa86d7ae2a1cf8 | 363 - .../80/2077802d4ba600151c15ab42d7919fee | 603 - .../80/4075d399d03e001518fa86d7ae2a1cf8 | 206 - .../81/b0e3d39bd13e001518fa86d7ae2a1cf8 | 326 - .../82/201f90d5d03e001518fa86d7ae2a1cf8 | 211 - .../82/704f84a1d8a500151c15ab42d7919fee | 596 - .../83/20a1e315cf3e001518fa86d7ae2a1cf8 | 362 - .../84/a0c00f13cf3e001518fa86d7ae2a1cf8 | 362 - .../85/401c3763e640001514c09dece48b36c7 | 73 - .../86/b01dd91a4ca600151c15ab42d7919fee | 605 - .../87/30ab730244a600151c15ab42d7919fee | 366 - .../8c/a0ea662dcf3e001518fa86d7ae2a1cf8 | 362 - .../8d/b08d79a849a600151c15ab42d7919fee | 125 - .../8e/80598e6842a600151c15ab42d7919fee | 604 - .../91/c01c0d9ecf3e001518fa86d7ae2a1cf8 | 71 - .../93/10f3fc0acf3e001518fa86d7ae2a1cf8 | 361 - .../93/d0f07864d23e001518fa86d7ae2a1cf8 | 376 - .../94/2033b6d6d13e001518fa86d7ae2a1cf8 | 373 - .../96/20ba5e09d43e001518fa86d7ae2a1cf8 | 219 - .../97/20ad60e0d03e001518fa86d7ae2a1cf8 | 211 - .../97/a0aae0bdd23e001518fa86d7ae2a1cf8 | 223 - .../97/c037f44de440001514c09dece48b36c7 | 296 - .../97/c0e2ad6fce3e001518fa86d7ae2a1cf8 | 357 - .../97/f0a3a5f1de40001514c09dece48b36c7 | 297 - .../98/201af098d03e001518fa86d7ae2a1cf8 | 205 - .../98/20ac1ac949a600151c15ab42d7919fee | 125 - .../9a/90dce6d5ce3e001518fa86d7ae2a1cf8 | 361 - .../9a/a0aebdacd03e001518fa86d7ae2a1cf8 | 206 - .../9a/e08e32dd2d53001516cdaaef55e27ba4 | 15 - .../9c/30bb8899d13e001518fa86d7ae2a1cf8 | 326 - .../9c/30e075274ca600151c15ab42d7919fee | 604 - .../9d/60a4c73b42a600151c15ab42d7919fee | 604 - .../a0/30b1eb2c4ba600151c15ab42d7919fee | 602 - .../a1/1035b42cd23e001518fa86d7ae2a1cf8 | 376 - .../a1/40b13fdfb94400151637bde96975c236 | 7 - .../a1/a05e6526d23e001518fa86d7ae2a1cf8 | 375 - .../a1/b06db16849a600151c15ab42d7919fee | 117 - .../a2/206c0ba2d23e001518fa86d7ae2a1cf8 | 222 - .../a2/20ecb1f0d03e001518fa86d7ae2a1cf8 | 211 - .../a3/b08191454ba600151c15ab42d7919fee | 604 - .../a4/a0f428a3d33e001518fa86d7ae2a1cf8 | 219 - .../a5/102ab363e640001514c09dece48b36c7 | 73 - .../a8/4016faaee240001514c09dece48b36c7 | 299 - .../aa/a076f09ad33e001518fa86d7ae2a1cf8 | 218 - .../ab/c07bf623e640001514c09dece48b36c7 | 72 - .../ab/c0cfe25644a600151c15ab42d7919fee | 367 - .../ac/50a4ecaae240001514c09dece48b36c7 | 298 - .../ad/60b39408d43e001518fa86d7ae2a1cf8 | 220 - .../ad/b067a2dd2d53001516cdaaef55e27ba4 | 15 - .../ad/c0954ebcce3e001518fa86d7ae2a1cf8 | 361 - .../ad/e01e43fdde40001514c09dece48b36c7 | 297 - .../ae/00c863dc41a600151c15ab42d7919fee | 603 - .../ae/1023a9f9cc3e001518fa86d7ae2a1cf8 | 194 - .../ae/d01c7740e340001514c09dece48b36c7 | 295 - .../b/301da326cd3e001518fa86d7ae2a1cf8 | 25 - .../b1/20248930cd3e001518fa86d7ae2a1cf8 | 25 - .../b1/30440676d03e001518fa86d7ae2a1cf8 | 201 - .../b3/100a9853d43e001518fa86d7ae2a1cf8 | 224 - .../b3/309b60224ca600151c15ab42d7919fee | 604 - .../b3/a04fb97a44a600151c15ab42d7919fee | 364 - .../b3/c04f9e03ce3e001518fa86d7ae2a1cf8 | 354 - .../b3/f0d62592e540001514c09dece48b36c7 | 72 - .../b5/00f67dc54ca600151c15ab42d7919fee | 602 - .../b5/202ce194d13e001518fa86d7ae2a1cf8 | 326 - .../b5/20cff1fb49a600151c15ab42d7919fee | 604 - .../b5/40ecd766ce3e001518fa86d7ae2a1cf8 | 31 - .../b5/b00008cc4ca600151c15ab42d7919fee | 602 - .../b6/20667af5cf3e001518fa86d7ae2a1cf8 | 197 - .../b6/20b982994aa600151c15ab42d7919fee | 366 - .../b7/20f6378ed03e001518fa86d7ae2a1cf8 | 204 - .../b7/80013692d8a500151c15ab42d7919fee | 595 - .../b7/b0476c2b4ca600151c15ab42d7919fee | 603 - .../b7/b048b351cd3e001518fa86d7ae2a1cf8 | 31 - .../b8/b0ca9a4a49a600151c15ab42d7919fee | 604 - .../b9/c0ad8e3ee340001514c09dece48b36c7 | 294 - .../bb/708754aee240001514c09dece48b36c7 | 298 - .../bc/30916f57cf3e001518fa86d7ae2a1cf8 | 362 - .../bc/a0204038ce3e001518fa86d7ae2a1cf8 | 355 - .../bc/a099c9afd13e001518fa86d7ae2a1cf8 | 368 - .../bd/301fea5849a600151c15ab42d7919fee | 364 - .../bf/a056849fd33e001518fa86d7ae2a1cf8 | 219 - .../bf/a0d1b862cf3e001518fa86d7ae2a1cf8 | 364 - .../bf/b097a02e4ca600151c15ab42d7919fee | 603 - .../bf/b0a27d3d4ba600151c15ab42d7919fee | 604 - .../c/b06ccd99ce3e001518fa86d7ae2a1cf8 | 358 - .../c2/20d96d9ad33e001518fa86d7ae2a1cf8 | 216 - .../c3/40771d08e740001514c09dece48b36c7 | 74 - .../c4/b016f69349a600151c15ab42d7919fee | 355 - .../c5/30315643d03e001518fa86d7ae2a1cf8 | 198 - .../c5/a03d9d1145a600151c15ab42d7919fee | 109 - .../ca/60051534d8a500151c15ab42d7919fee | 596 - .../cc/b08607c4d23e001518fa86d7ae2a1cf8 | 215 - .../cd/90837b3cd23e001518fa86d7ae2a1cf8 | 377 - .../d/40ebea47e340001514c09dece48b36c7 | 296 - .../d0/405b2dafe240001514c09dece48b36c7 | 298 - .../d0/d0f74b8de640001514c09dece48b36c7 | 73 - .../d0/f0f48766e640001514c09dece48b36c7 | 73 - .../d2/204ad69bd03e001518fa86d7ae2a1cf8 | 206 - .../d2/505b5f5e45a600151c15ab42d7919fee | 115 - .../d2/50685e70e240001514c09dece48b36c7 | 453 - .../d4/b0b5a2a749a600151c15ab42d7919fee | 125 - .../d5/d0e71dc1e140001514c09dece48b36c7 | 450 - .../d6/2061743542a600151c15ab42d7919fee | 364 - .../d6/a08b7a0ed03e001518fa86d7ae2a1cf8 | 198 - .../d7/a0f61d9bd03e001518fa86d7ae2a1cf8 | 206 - .../d8/4044c9a7e240001514c09dece48b36c7 | 297 - .../da/a0d614ced03e001518fa86d7ae2a1cf8 | 210 - .../db/50afb721e640001514c09dece48b36c7 | 72 - .../e/a0795133d23e001518fa86d7ae2a1cf8 | 376 - .../e/d03a30e844a600151c15ab42d7919fee | 107 - .../e0/a07905a5cf3e001518fa86d7ae2a1cf8 | 71 - .../e3/20517c59cf3e001518fa86d7ae2a1cf8 | 364 - .../e3/d0df3dbadf40001514c09dece48b36c7 | 71 - .../e4/3060bf8dcf3e001518fa86d7ae2a1cf8 | 364 - .../e6/c048252a4ca600151c15ab42d7919fee | 603 - .../e9/504e12aee240001514c09dece48b36c7 | 298 - .../e9/c0b3154ce440001514c09dece48b36c7 | 296 - .../eb/3086890bd03e001518fa86d7ae2a1cf8 | 198 - .../eb/40b3b71cad9e0015192daf17db672400 | 595 - .../eb/d028dc51d8a500151c15ab42d7919fee | 596 - .../ec/f0e2d8a2d8a500151c15ab42d7919fee | 597 - .../ed/f00520bce240001514c09dece48b36c7 | 299 - .../ee/306a96924aa600151c15ab42d7919fee | 364 - .../ef/206bbc9acf3e001518fa86d7ae2a1cf8 | 71 - .../f/a0d81438d33e001518fa86d7ae2a1cf8 | 216 - .../f/b08c4dd3d13e001518fa86d7ae2a1cf8 | 372 - .../f0/b01766da4ba600151c15ab42d7919fee | 604 - .../f2/205fa4c2d03e001518fa86d7ae2a1cf8 | 209 - .../f2/a0380b49d03e001518fa86d7ae2a1cf8 | 200 - .../f3/203061bfd23e001518fa86d7ae2a1cf8 | 215 - .../f3/a09a2529d33e001518fa86d7ae2a1cf8 | 215 - .../f3/b07c2ef049a600151c15ab42d7919fee | 353 - .../f4/20d00369d23e001518fa86d7ae2a1cf8 | 380 - .../f5/60e49bf5de40001514c09dece48b36c7 | 297 - .../f5/a069aa5a45a600151c15ab42d7919fee | 115 - .../f7/7055129442a600151c15ab42d7919fee | 365 - .../f9/a01791b5d13e001518fa86d7ae2a1cf8 | 369 - .../fa/b05b33334ba600151c15ab42d7919fee | 603 - .../fb/307961d7cf3e001518fa86d7ae2a1cf8 | 363 - .../fc/80951d9441a600151c15ab42d7919fee | 597 - .../fe/204112ead13e001518fa86d7ae2a1cf8 | 374 - .../fe/f0cde596d8a500151c15ab42d7919fee | 596 - .../ff/a0790ee2cf3e001518fa86d7ae2a1cf8 | 196 - .../ff/a07a53fd4ca600151c15ab42d7919fee | 366 - .../RemoteSystemsTempFiles/.markers.snap | Bin 192 -> 0 bytes .../RemoteSystemsTempFiles/.syncinfo.snap | Bin 192 -> 0 bytes .../.indexes/e4/77/69/e/history.index | Bin 102 -> 0 bytes .../.indexes/properties.index | Bin 176 -> 0 bytes .../.projects/TheButtonAutoFlair/.markers | Bin 1129 -> 0 bytes .../TheButtonAutoFlair/.markers.snap | Bin 14454 -> 0 bytes .../TheButtonAutoFlair/.syncinfo.snap | Bin 192 -> 0 bytes .../.root/.indexes/history.version | 1 - .../.root/.indexes/properties.index | Bin 282 -> 0 bytes .../.root/.indexes/properties.version | 1 - .../.root/.markers.snap | Bin 192 -> 0 bytes .../org.eclipse.core.resources/.root/98.tree | Bin 9139 -> 0 bytes .../.safetable/org.eclipse.core.resources | Bin 11660 -> 0 bytes .../org.eclipse.core.resources/98.snap | Bin 12536 -> 0 bytes .../org.eclipse.core.resources.prefs | 2 - .../.settings/org.eclipse.debug.ui.prefs | 3 - .../.settings/org.eclipse.help.base.prefs | 6 - .../.settings/org.eclipse.jdt.core.prefs | 3 - .../.settings/org.eclipse.jdt.launching.prefs | 2 - .../.settings/org.eclipse.jdt.ui.prefs | 21 - .../org.eclipse.jst.j2ee.webservice.ui.prefs | 2 - .../.settings/org.eclipse.jst.jsp.core.prefs | 2 - .../.settings/org.eclipse.m2e.discovery.prefs | 2 - .../org.eclipse.mylyn.context.core.prefs | 2 - .../.settings/org.eclipse.mylyn.java.ui.prefs | 3 - .../org.eclipse.mylyn.monitor.ui.prefs | 2 - .../org.eclipse.mylyn.tasks.ui.prefs | 4 - .../.settings/org.eclipse.pde.api.tools.prefs | 2 - .../.settings/org.eclipse.pde.core.prefs | 2 - .../.settings/org.eclipse.pde.ui.prefs | 2 - .../.settings/org.eclipse.rse.core.prefs | 4 - .../.settings/org.eclipse.rse.ui.prefs | 2 - .../.settings/org.eclipse.search.prefs | 2 - .../.settings/org.eclipse.team.cvs.ui.prefs | 2 - .../.settings/org.eclipse.team.ui.prefs | 2 - .../.settings/org.eclipse.ui.editors.prefs | 2 - .../.settings/org.eclipse.ui.ide.prefs | 8 - .../.settings/org.eclipse.ui.prefs | 2 - .../.settings/org.eclipse.ui.workbench.prefs | 4 - .../.settings/org.eclipse.wst.jsdt.ui.prefs | 10 - .../.settings/org.eclipse.wst.sse.core.prefs | 2 - .../.settings/org.eclipse.wst.sse.ui.prefs | 4 - .../org.eclipse.wst.ws.service.policy.prefs | 3 - .../org.eclipse.debug.ui/dialog_settings.xml | 18 - .../org.eclipse.e4.workbench/workbench.xmi | 3227 ---- .../dialog_settings.xml | 62 - .../org.eclipse.help.ui/dialog_settings.xml | 3 - ...dding_32_a_32_new_32_software_32_site.hist | 6 - .../scope_sets/Default.pref | 2 - .../org.eclipse.jdt.core/1233791618.index | Bin 120375 -> 0 bytes .../org.eclipse.jdt.core/1429456332.index | Bin 11973 -> 0 bytes .../org.eclipse.jdt.core/1508644233.index | Bin 22350 -> 0 bytes .../org.eclipse.jdt.core/1528680760.index | Bin 83830 -> 0 bytes .../org.eclipse.jdt.core/1737447423.index | Bin 25 -> 0 bytes .../org.eclipse.jdt.core/1770465405.index | Bin 8445 -> 0 bytes .../org.eclipse.jdt.core/185975254.index | Bin 85281 -> 0 bytes .../org.eclipse.jdt.core/1870255979.index | Bin 2857219 -> 0 bytes .../org.eclipse.jdt.core/1923297441.index | Bin 14366 -> 0 bytes .../org.eclipse.jdt.core/1934142626.index | Bin 221358 -> 0 bytes .../org.eclipse.jdt.core/2089000613.index | Bin 59973 -> 0 bytes .../org.eclipse.jdt.core/2161397272.index | Bin 803207 -> 0 bytes .../org.eclipse.jdt.core/2216672097.index | Bin 12346 -> 0 bytes .../org.eclipse.jdt.core/2292250293.index | Bin 11175953 -> 0 bytes .../org.eclipse.jdt.core/2345470644.index | Bin 93798 -> 0 bytes .../org.eclipse.jdt.core/2690778029.index | Bin 72053 -> 0 bytes .../org.eclipse.jdt.core/2899965704.index | Bin 32581 -> 0 bytes .../org.eclipse.jdt.core/2959957318.index | Bin 4249 -> 0 bytes .../org.eclipse.jdt.core/3000975533.index | Bin 57821 -> 0 bytes .../org.eclipse.jdt.core/3089967703.index | Bin 233782 -> 0 bytes .../org.eclipse.jdt.core/3260353738.index | Bin 106675 -> 0 bytes .../org.eclipse.jdt.core/3349413686.index | Bin 125280 -> 0 bytes .../org.eclipse.jdt.core/3403918450.index | Bin 114089 -> 0 bytes .../org.eclipse.jdt.core/3414683811.index | Bin 46367 -> 0 bytes .../org.eclipse.jdt.core/348382339.index | Bin 8506 -> 0 bytes .../org.eclipse.jdt.core/3499141547.index | Bin 66947 -> 0 bytes .../org.eclipse.jdt.core/3618673065.index | Bin 111866 -> 0 bytes .../org.eclipse.jdt.core/3699979211.index | Bin 760195 -> 0 bytes .../org.eclipse.jdt.core/3706135349.index | Bin 25 -> 0 bytes .../org.eclipse.jdt.core/375642920.index | Bin 26149 -> 0 bytes .../org.eclipse.jdt.core/3917394261.index | Bin 403482 -> 0 bytes .../org.eclipse.jdt.core/4020602821.index | Bin 302459 -> 0 bytes .../org.eclipse.jdt.core/452330869.index | Bin 734421 -> 0 bytes .../org.eclipse.jdt.core/50372563.index | Bin 29435 -> 0 bytes .../org.eclipse.jdt.core/51467596.index | Bin 28467 -> 0 bytes .../org.eclipse.jdt.core/638224934.index | Bin 119506 -> 0 bytes .../org.eclipse.jdt.core/678131303.index | Bin 220754 -> 0 bytes .../assumedExternalFilesCache | Bin 4 -> 0 bytes .../org.eclipse.jdt.core/externalFilesCache | Bin 2387 -> 0 bytes .../externalLibsTimeStamps | Bin 2675 -> 0 bytes .../org.eclipse.jdt.core/indexNamesMap.txt | 1 - .../org.eclipse.jdt.core/invalidArchivesCache | Bin 4 -> 0 bytes .../org.eclipse.jdt.core/javaLikeNames.txt | 1 - .../org.eclipse.jdt.core/nonChainingJarsCache | Bin 490 -> 0 bytes .../org.eclipse.jdt.core/savedIndexNames.txt | 38 - .../variablesAndContainers.dat | Bin 57689 -> 0 bytes .../dialog_settings.xml | 14 - .../org.eclipse.jdt.launching/.install.xml | 5 - .../libraryInfos.xml | 41 - .../org.eclipse.jdt.ui/OpenTypeHistory.xml | 2 - .../QualifiedTypeNameHistory.xml | 63 - .../org.eclipse.jdt.ui/dialog_settings.xml | 89 - .../org.eclipse.jdt.ui/jdt-images/0.png | Bin 147 -> 0 bytes .../org.eclipse.jdt.ui/jdt-images/1.png | Bin 509 -> 0 bytes .../org.eclipse.jdt.ui/jdt-images/2.png | Bin 490 -> 0 bytes .../org.eclipse.jdt.ui/jdt-images/3.png | Bin 277 -> 0 bytes .../org.eclipse.jdt.ui/jdt-images/4.png | Bin 238 -> 0 bytes .../org.eclipse.jdt.ui/jdt-images/5.png | Bin 194 -> 0 bytes .../org.eclipse.jdt.ui/jdt-images/6.png | Bin 220 -> 0 bytes .../taglibindex/1508644233.dat | Bin 520 -> 0 bytes .../.workspace/2015/7/29/refactorings.history | 4 - .../.workspace/2015/7/29/refactorings.index | 1 - .../2015/11/48/refactorings.history | 3 - .../2015/11/48/refactorings.index | 2 - .../2015/12/49/refactorings.history | 3 - .../2015/12/49/refactorings.index | 11 - .../2015/7/29/refactorings.history | 3 - .../2015/7/29/refactorings.index | 3 - .../2015/8/32/refactorings.history | 4 - .../2015/8/32/refactorings.index | 1 - .../2015/8/35/refactorings.history | 4 - .../2015/8/35/refactorings.index | 1 - .../dialog_settings.xml | 9 - .../dialog_settings.xml | 47 - .../TheButtonAutoFlair.lifecyclemapping | Bin 15300 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_0.cfs | Bin 298 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_0_1.del | Bin 9 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_1.cfs | Bin 298 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_1_1.del | Bin 9 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_2.cfs | Bin 298 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_2_1.del | Bin 9 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_3.cfs | Bin 298 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_3_1.del | Bin 9 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_4.cfs | Bin 298 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_4_1.del | Bin 9 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_5.cfs | Bin 298 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_5_1.del | Bin 9 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_6.cfs | Bin 298 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_6_1.del | Bin 9 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_7.cfs | Bin 298 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_7_1.del | Bin 9 -> 0 bytes .../05b0fe8524860bd73cbb07ef30fb34cc/_8.cfs | Bin 298 -> 0 bytes .../segments.gen | Bin 20 -> 0 bytes .../segments_a | Bin 298 -> 0 bytes .../write.lock | 0 .../22105a57205d73c52610d4dcad1b9155/_a.cfs | Bin 1536 -> 0 bytes .../segments.gen | Bin 20 -> 0 bytes .../segments_b | Bin 58 -> 0 bytes .../write.lock | 0 .../830bc118332e77292949ed1e6d2fabe0/_k.cfs | Bin 1463 -> 0 bytes .../830bc118332e77292949ed1e6d2fabe0/_k_1.del | Bin 9 -> 0 bytes .../830bc118332e77292949ed1e6d2fabe0/_l.cfs | Bin 274 -> 0 bytes .../segments.gen | Bin 20 -> 0 bytes .../segments_l | Bin 88 -> 0 bytes .../write.lock | 0 .../fab537b4c93f73529419b6d1f7adf1ae/_2s.cfs | Bin 37379 -> 0 bytes .../_2s_2.del | Bin 19 -> 0 bytes .../fab537b4c93f73529419b6d1f7adf1ae/_2t.cfs | Bin 1046 -> 0 bytes .../fab537b4c93f73529419b6d1f7adf1ae/_2u.cfs | Bin 849 -> 0 bytes .../segments.gen | Bin 20 -> 0 bytes .../segments_2m | Bin 121 -> 0 bytes .../write.lock | 0 .../org.eclipse.m2e.core/workspaceState.ser | Bin 12105 -> 0 bytes .../workspacestate.properties | 4 - .../TheButtonAutoFlair.container | Bin 3383 -> 0 bytes .../0.log | 1662 -- .../logback.1.6.2.20150902-0002.xml | 43 - .../dialog_settings.xml | 18 - .../.cache/clean-cache.properties | 2 - .../.extensions/.contributions.1 | Bin 29280 -> 0 bytes .../.extensions/.contributors.1 | Bin 49195 -> 0 bytes .../.extensions/.extraData.1 | Bin 934100 -> 0 bytes .../.extensions/.mainData.1 | Bin 3329192 -> 0 bytes .../.extensions/.manager/.fileTable.7 | 10 - .../.extensions/.manager/.fileTable.8 | 10 - .../.extensions/.manager/.fileTableLock | 0 .../.extensions/.namespaces.1 | Bin 45011 -> 0 bytes .../.extensions/.orphans.1 | Bin 171 -> 0 bytes .../org.eclipse.pde.core/.extensions/.table.1 | Bin 163580 -> 0 bytes .../.local_targets/1449259517199.target | 15 - .../SavedExternalPluginList.txt | 849 - .metadata/.plugins/org.eclipse.rse.core/.log | 0 ...al.core.RSELocalConnectionInitializer.mark | 0 .../FP.local.files_0/node.properties | 57 - .../H.local_16/node.properties | 25 - .../profiles/PRF.norbi-pc_251/node.properties | 7 - .metadata/.plugins/org.eclipse.rse.ui/.log | 0 .../org.eclipse.search/dialog_settings.xml | 48 - .../org.eclipse.team.cvs.core/.running | 0 .../dialog_settings.xml | 5 - .../org.eclipse.ui.ide/dialog_settings.xml | 16 - .../dialog_settings.xml | 36 - .../dialog_settings.xml | 45 - .../org.eclipse.ui.workbench/workingsets.xml | 96 - .../org.eclipse.wst.internet.cache/cache.xml | 1 - .../externalLibsTimeStamps | Bin 743 -> 0 bytes .../libraries/baseBrowserLibrary.js | 5393 ------ .../libraries/browserWindow.js | 618 - .../libraries/dom5.js | 922 - .../libraries/system.js | 1458 -- .../libraries/xhr.js | 104 - .../variablesAndContainers.dat | Bin 12 -> 0 bytes .../OpenTypeHistory.xml | 2 - .../QualifiedTypeNameHistory.xml | 2 - .../task-tags.properties | 3 - .../dialog_settings.xml | 5 - .../default_catalog.xml | 5 - .../system_catalog.xml | 190 - .metadata/version.ini | 3 - TheButtonAutoFlair/.travis.yml => .travis.yml | 0 RemoteSystemsTempFiles/.project | 12 - TheButtonAutoFlair/.classpath | 39 - TheButtonAutoFlair/.project | 23 - .../.settings/org.eclipse.jdt.core.prefs | 12 - .../.settings/org.eclipse.m2e.core.prefs | 4 - .../bin => bin}/org/json/CDL.class | Bin .../bin => bin}/org/json/Cookie.class | Bin .../bin => bin}/org/json/CookieList.class | Bin .../bin => bin}/org/json/HTTP.class | Bin .../bin => bin}/org/json/HTTPTokener.class | Bin .../bin => bin}/org/json/JSONArray.class | Bin .../bin => bin}/org/json/JSONException.class | Bin .../bin => bin}/org/json/JSONML.class | Bin .../org/json/JSONObject$Null.class | Bin .../bin => bin}/org/json/JSONObject.class | Bin .../bin => bin}/org/json/JSONString.class | Bin .../bin => bin}/org/json/JSONStringer.class | Bin .../bin => bin}/org/json/JSONTokener.class | Bin .../bin => bin}/org/json/JSONWriter.class | Bin .../bin => bin}/org/json/Property.class | Bin .../bin => bin}/org/json/README | 0 .../bin => bin}/org/json/XML.class | Bin .../bin => bin}/org/json/XMLTokener.class | Bin .../thebuttonautoflair/AnnouncerThread.class | Bin .../sznp/thebuttonautoflair/Commands$1.class | Bin .../sznp/thebuttonautoflair/Commands$2.class | Bin .../tk/sznp/thebuttonautoflair/Commands.class | Bin .../sznp/thebuttonautoflair/FlairStates.class | Bin .../MaybeOfflinePlayer.class | Bin .../PlayerJoinTimerTask.class | Bin .../thebuttonautoflair/PlayerListener$1.class | Bin .../thebuttonautoflair/PlayerListener$2.class | Bin .../thebuttonautoflair/PlayerListener.class | Bin .../sznp/thebuttonautoflair/PluginMain.class | Bin ...mlcleaner-2.16.jar => htmlcleaner-2.16.jar | Bin ...ner_licence.txt => htmlcleaner_licence.txt | 0 TheButtonAutoFlair/p.javaproj => p.javaproj | 0 TheButtonAutoFlair/plugin.yml => plugin.yml | 0 TheButtonAutoFlair/pom.xml => pom.xml | 0 .../src => src}/org/json/CDL.java | 0 .../src => src}/org/json/Cookie.java | 0 .../src => src}/org/json/CookieList.java | 0 .../src => src}/org/json/HTTP.java | 0 .../src => src}/org/json/HTTPTokener.java | 0 .../src => src}/org/json/JSONArray.java | 0 .../src => src}/org/json/JSONException.java | 0 .../src => src}/org/json/JSONML.java | 0 .../src => src}/org/json/JSONObject.java | 0 .../src => src}/org/json/JSONString.java | 0 .../src => src}/org/json/JSONStringer.java | 0 .../src => src}/org/json/JSONTokener.java | 0 .../src => src}/org/json/JSONWriter.java | 0 .../src => src}/org/json/Property.java | 0 .../src => src}/org/json/README | 0 .../src => src}/org/json/XML.java | 0 .../src => src}/org/json/XMLTokener.java | 0 .../thebuttonautoflair/AnnouncerThread.java | 0 .../tk/sznp/thebuttonautoflair/Channel.java | 0 .../thebuttonautoflair/ChatProcessing.java | 0 .../tk/sznp/thebuttonautoflair/Commands.java | 0 .../CreativeGlobalMechanic.java | 0 .../sznp/thebuttonautoflair/FlairStates.java | 0 .../tk/sznp/thebuttonautoflair/JarUtils.java | 0 .../MaybeOfflinePlayer.java | 0 .../PlayerJoinTimerTask.java | 0 .../thebuttonautoflair/PlayerListener.java | 0 .../sznp/thebuttonautoflair/PluginMain.java | 0 .../classes/org/json/CDL.class | Bin .../classes/org/json/Cookie.class | Bin .../classes/org/json/CookieList.class | Bin .../classes/org/json/HTTP.class | Bin .../classes/org/json/HTTPTokener.class | Bin .../classes/org/json/JSONArray.class | Bin .../classes/org/json/JSONException.class | Bin .../classes/org/json/JSONML.class | Bin .../classes/org/json/JSONObject$Null.class | Bin .../classes/org/json/JSONObject.class | Bin .../classes/org/json/JSONString.class | Bin .../classes/org/json/JSONStringer.class | Bin .../classes/org/json/JSONTokener.class | Bin .../classes/org/json/JSONWriter.class | Bin .../classes/org/json/Property.class | Bin .../target => target}/classes/org/json/README | 0 .../classes/org/json/XML.class | Bin .../classes/org/json/XMLTokener.class | Bin .../thebuttonautoflair/AnnouncerThread.class | Bin .../tk/sznp/thebuttonautoflair/Channel.class | Bin .../thebuttonautoflair/ChatProcessing.class | Bin .../sznp/thebuttonautoflair/Commands$1.class | Bin .../sznp/thebuttonautoflair/Commands$2.class | Bin .../tk/sznp/thebuttonautoflair/Commands.class | Bin .../CreativeGlobalMechanic.class | Bin .../sznp/thebuttonautoflair/FlairStates.class | Bin .../tk/sznp/thebuttonautoflair/JarUtils.class | Bin .../MaybeOfflinePlayer.class | Bin .../PlayerJoinTimerTask.class | Bin .../thebuttonautoflair/PlayerListener$1.class | Bin .../thebuttonautoflair/PlayerListener$2.class | Bin .../thebuttonautoflair/PlayerListener$3.class | Bin .../thebuttonautoflair/PlayerListener$4.class | Bin .../thebuttonautoflair/PlayerListener$5.class | Bin .../thebuttonautoflair/PlayerListener$6.class | Bin .../thebuttonautoflair/PlayerListener.class | Bin .../thebuttonautoflair/PluginMain$1.class | Bin .../thebuttonautoflair/PluginMain$2.class | Bin .../sznp/thebuttonautoflair/PluginMain.class | Bin 606 files changed, 114082 deletions(-) delete mode 100644 .metadata/.bak_0.log delete mode 100644 .metadata/.lock delete mode 100644 .metadata/.log delete mode 100644 .metadata/.mylyn/.taskListIndex/segments.gen delete mode 100644 .metadata/.mylyn/.taskListIndex/segments_1 delete mode 100644 .metadata/.mylyn/.tasks.xml.zip delete mode 100644 .metadata/.mylyn/repositories.xml.zip delete mode 100644 .metadata/.mylyn/tasks.xml.zip delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1/a0191b15d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1/b070e46d45a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/10/20fd03d549a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/10/302feacd41a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/12/a077bfc949a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/12/b09714c2cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/13/b0a0fbb849a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/14/20b7f4c2d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/15/a0689143d43e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/16/303c161945a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/17/70f2199141a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/19/c0e42302ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1a/c0bedf60e640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1c/50b35f3bd23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1c/a0ecf93ad23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1d/709a3bde2d53001516cdaaef55e27ba4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1e/20ce3447d43e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1e/606a09eede40001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1e/a0477e13d43e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1e/b057e861ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1e/d0e4168be540001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1f/203f7772d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2/008fa000f34500151ebce83b3129f79d delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2/20385cfb44a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2/a06adb06d43e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/20/2004d51d42a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/20/802a22d2de40001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/20/b08b3094cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/21/20cc239649a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/21/c0a02994e640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/22/408c617d44a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/22/40feff6ce640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/22/a091cfc4d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/23/a0c7c72cd33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/24/c0d763f341a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/25/3067ea8bd13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/25/c05ce792e640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/26/20fee89fce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/26/a0111a40d33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/27/9011edbed23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/27/f08a8910cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/28/309e6352d33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/29/40e1da43e340001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/29/50338b22e340001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2a/20868515d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2b/702271ffde40001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2c/80f4cccb41a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2e/90fc2ebfd23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2f/30aed98449a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3/004e1951d8a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/30/20a0c374d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/30/60f899dc2d53001516cdaaef55e27ba4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/31/20e2516b49a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/31/c0e1dbcdcf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/32/907f4f6a44a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/34/40f80735d5a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/34/b097b71bce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/37/20e61fc4d13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/37/c0f63c61e240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/38/209c0ada49a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/38/a0523ba549a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/38/a0f3a0e9cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/39/2006034ad03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3b/30bdb825cd3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3b/50ce8dd8d4a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3c/205637bed23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3c/d00a0e58e240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3e/6022916ee240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3f/a0709f19cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4/b030d637cd3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/41/20453fde49a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/41/c0d7140345a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/44/3078a0bed23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/44/b01fe45045a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/46/a0e24f1ad43e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/47/209354bad13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/47/20a74d8ad13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/49/203c0b4ad33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/49/a04d8dc3d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/49/b0556e29ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4a/20662b05d33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4b/203dd097ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4b/40b1bfa8755d001515f3fd278c34f57e delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4c/30becb7849a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4d/a0ee15dcd13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4d/c045effe4ba600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/53/202e6b364ba600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/53/40b494f5e540001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/53/d0c1dad6e440001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/55/c0fc6b25cd3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/56/205a1cf9d13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/56/f06dfb95d8a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5b/008c7edd2d53001516cdaaef55e27ba4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5b/e0d83cf9de40001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5c/a03b3ea1d33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5d/a0a6c2d0d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5d/a0befd81d33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5e/c0d6d38be640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5f/2061341bd23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5f/50257859e640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5f/c0b28923ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6/2029114dd33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6/208a8252ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6/a032431fd23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/61/b0779e98d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/63/206c2677ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/63/90beaa3cd8a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/63/d06551420941001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/64/202fdd3acd3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/64/20a74791d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/64/90cec71ead9e0015192daf17db672400 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/65/5094853442a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/67/c0952ea8e240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6a/20a2e34ad03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6a/406f8416e340001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6b/700669952d53001516cdaaef55e27ba4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6c/20b08dced03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6c/500072fecd3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6c/506c7d4ee140001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6e/60f4f3db2d53001516cdaaef55e27ba4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6e/a01e1adad13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6f/10014ab944a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6f/d0569c5ae240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7/d0a7c5c8ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/71/20d5de7b4aa600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/71/b09765e7d13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/73/b05d0d564ca600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/75/200e61c5d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/75/20bc5301d13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/75/407eccf8d0a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/75/a0acffa2d13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/76/20df8b6f45a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/76/800c9206d5a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/76/b054e00b4aa600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/77/10dec4cbce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/78/a0991cb7d13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/78/c0c9ec2dd8a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7c/3014764dcd3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7c/a0934f14cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7d/a005617fd13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/80/2077802d4ba600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/80/4075d399d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/81/b0e3d39bd13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/82/201f90d5d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/82/704f84a1d8a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/83/20a1e315cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/84/a0c00f13cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/85/401c3763e640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/86/b01dd91a4ca600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/87/30ab730244a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8c/a0ea662dcf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8d/b08d79a849a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8e/80598e6842a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/91/c01c0d9ecf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/93/10f3fc0acf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/93/d0f07864d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/94/2033b6d6d13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/96/20ba5e09d43e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/97/20ad60e0d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/97/a0aae0bdd23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/97/c037f44de440001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/97/c0e2ad6fce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/97/f0a3a5f1de40001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/98/201af098d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/98/20ac1ac949a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9a/90dce6d5ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9a/a0aebdacd03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9a/e08e32dd2d53001516cdaaef55e27ba4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9c/30bb8899d13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9c/30e075274ca600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9d/60a4c73b42a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a0/30b1eb2c4ba600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a1/1035b42cd23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a1/40b13fdfb94400151637bde96975c236 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a1/a05e6526d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a1/b06db16849a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a2/206c0ba2d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a2/20ecb1f0d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a3/b08191454ba600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a4/a0f428a3d33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a5/102ab363e640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a8/4016faaee240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/aa/a076f09ad33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ab/c07bf623e640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ab/c0cfe25644a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ac/50a4ecaae240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ad/60b39408d43e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ad/b067a2dd2d53001516cdaaef55e27ba4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ad/c0954ebcce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ad/e01e43fdde40001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ae/00c863dc41a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ae/1023a9f9cc3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ae/d01c7740e340001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b/301da326cd3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b1/20248930cd3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b1/30440676d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b3/100a9853d43e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b3/309b60224ca600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b3/a04fb97a44a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b3/c04f9e03ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b3/f0d62592e540001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b5/00f67dc54ca600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b5/202ce194d13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b5/20cff1fb49a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b5/40ecd766ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b5/b00008cc4ca600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b6/20667af5cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b6/20b982994aa600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b7/20f6378ed03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b7/80013692d8a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b7/b0476c2b4ca600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b7/b048b351cd3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b8/b0ca9a4a49a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b9/c0ad8e3ee340001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bb/708754aee240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bc/30916f57cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bc/a0204038ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bc/a099c9afd13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bd/301fea5849a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bf/a056849fd33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bf/a0d1b862cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bf/b097a02e4ca600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bf/b0a27d3d4ba600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c/b06ccd99ce3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c2/20d96d9ad33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c3/40771d08e740001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c4/b016f69349a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c5/30315643d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c5/a03d9d1145a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ca/60051534d8a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/cc/b08607c4d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/cd/90837b3cd23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d/40ebea47e340001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d0/405b2dafe240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d0/d0f74b8de640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d0/f0f48766e640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d2/204ad69bd03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d2/505b5f5e45a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d2/50685e70e240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d4/b0b5a2a749a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d5/d0e71dc1e140001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d6/2061743542a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d6/a08b7a0ed03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d7/a0f61d9bd03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d8/4044c9a7e240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/da/a0d614ced03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/db/50afb721e640001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e/a0795133d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e/d03a30e844a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e0/a07905a5cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e3/20517c59cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e3/d0df3dbadf40001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e4/3060bf8dcf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e6/c048252a4ca600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e9/504e12aee240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e9/c0b3154ce440001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/eb/3086890bd03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/eb/40b3b71cad9e0015192daf17db672400 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/eb/d028dc51d8a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ec/f0e2d8a2d8a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ed/f00520bce240001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ee/306a96924aa600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ef/206bbc9acf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f/a0d81438d33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f/b08c4dd3d13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f0/b01766da4ba600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f2/205fa4c2d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f2/a0380b49d03e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f3/203061bfd23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f3/a09a2529d33e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f3/b07c2ef049a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f4/20d00369d23e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f5/60e49bf5de40001514c09dece48b36c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f5/a069aa5a45a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f7/7055129442a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f9/a01791b5d13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fa/b05b33334ba600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fb/307961d7cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fc/80951d9441a600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fe/204112ead13e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fe/f0cde596d8a500151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ff/a0790ee2cf3e001518fa86d7ae2a1cf8 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ff/a07a53fd4ca600151c15ab42d7919fee delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.indexes/e4/77/69/e/history.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.indexes/properties.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/98.tree delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/98.snap delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.base.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.j2ee.webservice.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.jsp.core.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.java.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.api.tools.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.core.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.core.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.jsdt.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.ws.service.policy.prefs delete mode 100644 .metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi delete mode 100644 .metadata/.plugins/org.eclipse.equinox.p2.ui/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.help.ui/scope_sets/Adding_32_a_32_new_32_software_32_site.hist delete mode 100644 .metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/1233791618.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/1429456332.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/1508644233.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/1528680760.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/1737447423.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/1770465405.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/185975254.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/1870255979.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/1923297441.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/1934142626.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/2089000613.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/2161397272.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/2216672097.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/2292250293.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/2345470644.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/2690778029.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/2899965704.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/2959957318.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3000975533.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3089967703.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3260353738.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3349413686.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3403918450.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3414683811.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/348382339.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3499141547.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3618673065.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3699979211.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3706135349.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/375642920.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3917394261.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/4020602821.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/452330869.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/50372563.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/51467596.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/638224934.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/678131303.index delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/assumedExternalFilesCache delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/externalFilesCache delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/indexNamesMap.txt delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat delete mode 100644 .metadata/.plugins/org.eclipse.jdt.debug.ui/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.jdt.launching/.install.xml delete mode 100644 .metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/0.png delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/1.png delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/2.png delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/3.png delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/4.png delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/6.png delete mode 100644 .metadata/.plugins/org.eclipse.jst.jsp.core/taglibindex/1508644233.dat delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2015/7/29/refactorings.history delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2015/7/29/refactorings.index delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/11/48/refactorings.history delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/11/48/refactorings.index delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/12/49/refactorings.history delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/12/49/refactorings.index delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/7/29/refactorings.history delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/7/29/refactorings.index delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/32/refactorings.history delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/32/refactorings.index delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/35/refactorings.history delete mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/35/refactorings.index delete mode 100644 .metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core.ui/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/TheButtonAutoFlair.lifecyclemapping delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_0.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_0_1.del delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_1.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_1_1.del delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_2.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_2_1.del delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_3.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_3_1.del delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_4.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_4_1.del delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_5.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_5_1.del delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_6.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_6_1.del delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_7.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_7_1.del delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/_8.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/segments.gen delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/segments_a delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/05b0fe8524860bd73cbb07ef30fb34cc/write.lock delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/22105a57205d73c52610d4dcad1b9155/_a.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/22105a57205d73c52610d4dcad1b9155/segments.gen delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/22105a57205d73c52610d4dcad1b9155/segments_b delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/22105a57205d73c52610d4dcad1b9155/write.lock delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/830bc118332e77292949ed1e6d2fabe0/_k.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/830bc118332e77292949ed1e6d2fabe0/_k_1.del delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/830bc118332e77292949ed1e6d2fabe0/_l.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/830bc118332e77292949ed1e6d2fabe0/segments.gen delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/830bc118332e77292949ed1e6d2fabe0/segments_l delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/830bc118332e77292949ed1e6d2fabe0/write.lock delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/fab537b4c93f73529419b6d1f7adf1ae/_2s.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/fab537b4c93f73529419b6d1f7adf1ae/_2s_2.del delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/fab537b4c93f73529419b6d1f7adf1ae/_2t.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/fab537b4c93f73529419b6d1f7adf1ae/_2u.cfs delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/fab537b4c93f73529419b6d1f7adf1ae/segments.gen delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/fab537b4c93f73529419b6d1f7adf1ae/segments_2m delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/nexus/fab537b4c93f73529419b6d1f7adf1ae/write.lock delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/workspaceState.ser delete mode 100644 .metadata/.plugins/org.eclipse.m2e.core/workspacestate.properties delete mode 100644 .metadata/.plugins/org.eclipse.m2e.jdt/TheButtonAutoFlair.container delete mode 100644 .metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log delete mode 100644 .metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.6.2.20150902-0002.xml delete mode 100644 .metadata/.plugins/org.eclipse.mylyn.tasks.ui/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.extensions/.contributions.1 delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.extensions/.contributors.1 delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.extensions/.extraData.1 delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.extensions/.mainData.1 delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.extensions/.manager/.fileTable.7 delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.extensions/.manager/.fileTable.8 delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.extensions/.manager/.fileTableLock delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.extensions/.namespaces.1 delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.extensions/.orphans.1 delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.extensions/.table.1 delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/.local_targets/1449259517199.target delete mode 100644 .metadata/.plugins/org.eclipse.pde.core/SavedExternalPluginList.txt delete mode 100644 .metadata/.plugins/org.eclipse.rse.core/.log delete mode 100644 .metadata/.plugins/org.eclipse.rse.core/initializerMarks/org.eclipse.rse.internal.core.RSELocalConnectionInitializer.mark delete mode 100644 .metadata/.plugins/org.eclipse.rse.core/profiles/PRF.norbi-pc_251/FP.local.files_0/node.properties delete mode 100644 .metadata/.plugins/org.eclipse.rse.core/profiles/PRF.norbi-pc_251/H.local_16/node.properties delete mode 100644 .metadata/.plugins/org.eclipse.rse.core/profiles/PRF.norbi-pc_251/node.properties delete mode 100644 .metadata/.plugins/org.eclipse.rse.ui/.log delete mode 100644 .metadata/.plugins/org.eclipse.search/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.team.cvs.core/.running delete mode 100644 .metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml delete mode 100644 .metadata/.plugins/org.eclipse.wst.internet.cache/cache.xml delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/externalLibsTimeStamps delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/baseBrowserLibrary.js delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/browserWindow.js delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/dom5.js delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/system.js delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/xhr.js delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.core/variablesAndContainers.dat delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.ui/OpenTypeHistory.xml delete mode 100644 .metadata/.plugins/org.eclipse.wst.jsdt.ui/QualifiedTypeNameHistory.xml delete mode 100644 .metadata/.plugins/org.eclipse.wst.sse.core/task-tags.properties delete mode 100644 .metadata/.plugins/org.eclipse.wst.sse.ui/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.wst.xml.core/default_catalog.xml delete mode 100644 .metadata/.plugins/org.eclipse.wst.xml.core/system_catalog.xml delete mode 100644 .metadata/version.ini rename TheButtonAutoFlair/.travis.yml => .travis.yml (100%) delete mode 100644 RemoteSystemsTempFiles/.project delete mode 100644 TheButtonAutoFlair/.classpath delete mode 100644 TheButtonAutoFlair/.project delete mode 100644 TheButtonAutoFlair/.settings/org.eclipse.jdt.core.prefs delete mode 100644 TheButtonAutoFlair/.settings/org.eclipse.m2e.core.prefs rename {TheButtonAutoFlair/bin => bin}/org/json/CDL.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/Cookie.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/CookieList.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/HTTP.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/HTTPTokener.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/JSONArray.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/JSONException.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/JSONML.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/JSONObject$Null.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/JSONObject.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/JSONString.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/JSONStringer.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/JSONTokener.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/JSONWriter.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/Property.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/README (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/XML.class (100%) rename {TheButtonAutoFlair/bin => bin}/org/json/XMLTokener.class (100%) rename {TheButtonAutoFlair/bin => bin}/tk/sznp/thebuttonautoflair/AnnouncerThread.class (100%) rename {TheButtonAutoFlair/bin => bin}/tk/sznp/thebuttonautoflair/Commands$1.class (100%) rename {TheButtonAutoFlair/bin => bin}/tk/sznp/thebuttonautoflair/Commands$2.class (100%) rename {TheButtonAutoFlair/bin => bin}/tk/sznp/thebuttonautoflair/Commands.class (100%) rename {TheButtonAutoFlair/bin => bin}/tk/sznp/thebuttonautoflair/FlairStates.class (100%) rename {TheButtonAutoFlair/bin => bin}/tk/sznp/thebuttonautoflair/MaybeOfflinePlayer.class (100%) rename {TheButtonAutoFlair/bin => bin}/tk/sznp/thebuttonautoflair/PlayerJoinTimerTask.class (100%) rename {TheButtonAutoFlair/bin => bin}/tk/sznp/thebuttonautoflair/PlayerListener$1.class (100%) rename {TheButtonAutoFlair/bin => bin}/tk/sznp/thebuttonautoflair/PlayerListener$2.class (100%) rename {TheButtonAutoFlair/bin => bin}/tk/sznp/thebuttonautoflair/PlayerListener.class (100%) rename {TheButtonAutoFlair/bin => bin}/tk/sznp/thebuttonautoflair/PluginMain.class (100%) rename TheButtonAutoFlair/htmlcleaner-2.16.jar => htmlcleaner-2.16.jar (100%) rename TheButtonAutoFlair/htmlcleaner_licence.txt => htmlcleaner_licence.txt (100%) rename TheButtonAutoFlair/p.javaproj => p.javaproj (100%) rename TheButtonAutoFlair/plugin.yml => plugin.yml (100%) rename TheButtonAutoFlair/pom.xml => pom.xml (100%) rename {TheButtonAutoFlair/src => src}/org/json/CDL.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/Cookie.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/CookieList.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/HTTP.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/HTTPTokener.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/JSONArray.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/JSONException.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/JSONML.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/JSONObject.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/JSONString.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/JSONStringer.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/JSONTokener.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/JSONWriter.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/Property.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/README (100%) rename {TheButtonAutoFlair/src => src}/org/json/XML.java (100%) rename {TheButtonAutoFlair/src => src}/org/json/XMLTokener.java (100%) rename {TheButtonAutoFlair/src => src}/tk/sznp/thebuttonautoflair/AnnouncerThread.java (100%) rename {TheButtonAutoFlair/src => src}/tk/sznp/thebuttonautoflair/Channel.java (100%) rename {TheButtonAutoFlair/src => src}/tk/sznp/thebuttonautoflair/ChatProcessing.java (100%) rename {TheButtonAutoFlair/src => src}/tk/sznp/thebuttonautoflair/Commands.java (100%) rename {TheButtonAutoFlair/src => src}/tk/sznp/thebuttonautoflair/CreativeGlobalMechanic.java (100%) rename {TheButtonAutoFlair/src => src}/tk/sznp/thebuttonautoflair/FlairStates.java (100%) rename {TheButtonAutoFlair/src => src}/tk/sznp/thebuttonautoflair/JarUtils.java (100%) rename {TheButtonAutoFlair/src => src}/tk/sznp/thebuttonautoflair/MaybeOfflinePlayer.java (100%) rename {TheButtonAutoFlair/src => src}/tk/sznp/thebuttonautoflair/PlayerJoinTimerTask.java (100%) rename {TheButtonAutoFlair/src => src}/tk/sznp/thebuttonautoflair/PlayerListener.java (100%) rename {TheButtonAutoFlair/src => src}/tk/sznp/thebuttonautoflair/PluginMain.java (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/CDL.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/Cookie.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/CookieList.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/HTTP.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/HTTPTokener.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/JSONArray.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/JSONException.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/JSONML.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/JSONObject$Null.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/JSONObject.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/JSONString.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/JSONStringer.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/JSONTokener.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/JSONWriter.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/Property.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/README (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/XML.class (100%) rename {TheButtonAutoFlair/target => target}/classes/org/json/XMLTokener.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/AnnouncerThread.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/Channel.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/ChatProcessing.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/Commands$1.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/Commands$2.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/Commands.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/CreativeGlobalMechanic.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/FlairStates.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/JarUtils.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/MaybeOfflinePlayer.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/PlayerJoinTimerTask.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/PlayerListener$1.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/PlayerListener$2.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/PlayerListener$3.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/PlayerListener$4.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/PlayerListener$5.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/PlayerListener$6.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/PlayerListener.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/PluginMain$1.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/PluginMain$2.class (100%) rename {TheButtonAutoFlair/target => target}/classes/tk/sznp/thebuttonautoflair/PluginMain.class (100%) diff --git a/.metadata/.bak_0.log b/.metadata/.bak_0.log deleted file mode 100644 index 3d63a5e..0000000 --- a/.metadata/.bak_0.log +++ /dev/null @@ -1,14220 +0,0 @@ -!SESSION 2015-11-26 21:19:17.303 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -This is a continuation of log file D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\.metadata\.bak_0.log -Created Time: 2015-11-26 22:01:11.109 - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:11.109 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:11.361 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:12.103 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:12.550 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:13.031 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:13.383 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:13.994 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:14.611 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:17.425 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:25.390 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:26.258 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:26.941 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:28.278 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:01:29.505 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-26 22:01:54.825 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:11.331 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:11.477 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:11.710 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:12.519 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:12.778 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:13.188 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:22.167 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:22.724 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:22.917 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:22.917 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:23.102 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:02:23.863 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:06:09.232 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:06:09.524 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:06:15.658 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:06:19.051 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:06:19.887 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:06:20.010 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:06:20.610 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:06:21.254 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:07:01.902 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:07:02.220 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:07:02.445 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:07:02.663 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:07:56.291 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:07:56.866 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:07:57.782 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-26 22:08:08.655 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:06.071 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:07.785 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:08.719 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:08.895 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:09.064 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-26 22:12:21.962 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:29.467 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:30.070 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:45.533 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:49.751 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:52.374 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:53.005 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:55.902 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:58.022 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:12:58.614 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:16:04.992 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:16:05.591 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:16:05.932 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-26 22:16:06.242 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-26 22:19:32.549 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) -!SESSION 2015-11-27 19:45:13.004 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-11-27 19:45:41.599 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-11-27 19:45:41.641 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 19:55:08.578 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 19:55:09.903 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 19:55:11.204 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 19:55:11.520 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 19:55:11.906 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 19:55:13.923 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 19:57:14.403 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 19:58:04.295 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:03:51.249 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:03:53.174 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:03:56.574 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:05:05.191 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:05:38.530 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:04.830 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:07.529 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:08.604 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:08.855 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:09.062 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:27.663 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:44.443 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:46.829 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:47.065 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:47.332 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:48.170 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:48.637 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:48.704 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:48.932 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:49.112 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:49.397 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:49.524 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:49.654 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:49.829 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:49.933 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:50.204 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:50.301 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:52.631 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:53.199 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:53.263 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:53.308 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:53.638 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:53.891 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:54.162 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:55.325 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:57.999 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:58.394 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:59.142 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:59.555 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:59.620 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:59.706 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:06:59.979 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:00.125 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:00.314 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:00.536 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:00.759 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:00.945 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:01.510 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:05.128 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:05.453 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:05.878 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:05.908 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:06.226 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:06.467 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:19.382 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:19.657 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:20.980 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:21.340 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:21.429 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:23.444 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:23.687 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:25.122 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:25.249 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:25.743 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:27.338 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:29.843 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:30.001 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:30.180 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:30.660 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:07:31.004 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:22.328 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:23.851 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:24.005 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:24.301 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:24.499 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:24.694 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:24.948 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:25.146 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:25.549 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:25.802 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:25.985 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:28.614 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:28.893 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:29.272 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:29.561 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:34.333 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:34.570 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:35.096 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:35.382 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:35.570 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:35.713 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:36.466 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:36.909 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:37.221 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:38.994 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:39.096 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:39.281 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:39.521 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:39.729 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:40.496 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:40.745 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:40.963 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:41.152 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:41.417 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:41.705 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:41.930 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:42.141 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:42.622 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:43.691 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:43.998 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:44.414 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:44.763 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:45.054 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:45.324 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:45.514 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:45.780 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:46.074 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:46.275 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:46.450 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:46.561 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:08:49.688 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:15.818 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:16.487 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:16.634 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:16.798 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:16.944 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:18.011 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:18.866 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:19.074 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:19.296 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:19.507 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:19.728 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:19.972 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:20.438 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:20.640 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:30.629 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:31.127 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:31.242 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:32.781 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:40.331 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:41.000 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:50.236 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:50.470 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:09:50.726 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:10:29.280 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:10:31.267 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:10:36.066 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:10:36.251 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:11:14.929 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:11:17.153 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:11:17.961 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:00.503 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:01.613 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:02.248 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:02.850 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:03.373 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:03.795 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:04.011 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:04.278 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:04.464 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:04.608 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:04.711 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:04.932 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:05.011 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:05.323 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:05.634 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:05.765 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:05.827 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:06.043 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:06.333 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:06.845 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:07.023 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:07.576 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:07.790 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:08.010 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:08.208 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:08.448 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:09.528 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:09.805 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:10.054 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:10.186 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:11.239 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:23.133 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:30.473 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:30.765 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:38.341 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:39.704 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:41.687 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:45.162 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:47.425 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:47.659 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:48.559 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:48.895 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:49.362 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:49.578 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:49.669 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:49.905 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:50.137 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:50.324 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:50.458 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:51.055 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:51.529 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:51.722 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:51.942 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:52.289 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:52.388 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:52.447 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:52.503 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:52.809 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:52.920 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:53.494 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:54.034 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:54.907 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:56.116 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:57.205 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:57.508 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:58.432 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:12:59.828 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:13:01.690 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:13:02.672 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:13:02.858 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:13:03.069 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:13:30.520 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:13:31.428 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:13:32.453 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:13:33.679 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:13:53.560 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:13:53.619 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:13:53.654 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:14:01.110 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:14:36.302 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:14:37.033 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:16:05.686 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:16:07.001 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:17:45.251 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:17:48.601 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:17:53.213 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:18:17.379 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:18:18.047 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:18:20.520 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:18:21.367 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:18:37.279 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:18:37.472 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:18:37.858 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:18:37.906 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:22:10.332 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:22:12.487 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:22:12.639 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:23:12.013 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:23:15.183 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:25:16.546 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:26:54.599 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:28:11.612 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:28:18.398 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:28:27.743 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:44.649 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:45.344 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:47.912 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:48.012 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:49.674 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:50.780 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:51.353 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:52.142 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:52.282 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:52.504 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:52.515 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:52.767 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:52.996 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:53.036 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:53.536 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:54.116 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:54.740 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:56.437 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:57.550 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:58.765 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:58.993 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:38:59.290 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:06.345 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:07.234 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:07.822 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:08.392 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:09.200 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:09.794 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:10.537 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:10.795 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:11.021 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:11.194 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:12.434 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:12.925 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:14.029 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:14.212 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:14.404 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:14.620 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:14.810 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:15.030 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:15.191 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:17.020 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:34.538 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:35.235 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:35.776 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:35.867 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:38.440 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:39:38.952 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:40:53.616 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:40:55.264 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:40:55.553 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:41:03.938 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:41:04.280 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:42:11.047 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:42:18.273 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:42:20.560 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:44:16.919 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:45:12.496 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:19.010 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:21.613 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:23.215 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:23.648 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:23.913 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:24.091 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:24.358 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:24.907 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:25.077 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:25.628 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:26.037 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:26.323 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:26.540 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:26.696 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:27.129 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:27.621 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:27.952 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:28.206 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:28.836 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:29.947 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:30.584 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:31.923 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:32.207 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:34.268 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:34.662 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:34.924 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:35.231 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:35.696 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:36.109 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:36.555 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:37.052 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:37.401 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:48.054 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:48.487 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:50.281 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:50.801 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:51.294 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:55.638 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:57.905 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:45:59.582 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:46:01.088 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:46:01.422 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:46:03.717 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:46:09.344 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:46:11.878 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:09.949 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:11.418 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:15.614 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:17.541 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:17.867 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:18.554 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:26.954 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:30.277 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:31.323 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:31.574 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:32.039 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:32.096 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:39.109 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:40.057 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:41.037 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:41.301 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:42.577 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:42.956 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:49.552 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:53:54.436 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:00.842 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:01.437 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:01.810 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:02.316 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:02.509 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:03.600 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:03.811 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:04.009 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:04.029 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:07.315 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:13.957 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:14.038 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:14.392 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:16.366 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:16.441 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:17.191 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:17.918 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:18.530 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:19.068 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:20.242 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:20.843 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:21.370 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:21.898 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:22.277 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:22.772 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:23.057 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 20:54:23.880 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:56:52.600 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:58:14.186 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:58:15.124 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:58:16.648 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:58:18.177 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:58:20.782 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 20:58:22.886 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 21:03:05.832 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 21:03:06.277 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 21:03:52.449 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-27 21:07:27.680 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 21:07:48.763 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 21:09:12.584 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-27 21:09:13.918 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 01:05:41.613 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 01:05:44.151 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 01:05:44.343 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-28 01:16:05.340 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) -!SESSION 2015-11-28 15:59:27.160 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-11-28 15:59:54.084 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-11-28 15:59:54.216 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.jface.text 4 0 2015-11-28 16:02:05.449 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:07.751 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:09.103 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:09.912 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:10.227 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:10.602 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:10.912 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:11.340 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:11.730 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:12.066 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:12.336 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:12.595 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:12.849 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:13.052 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:13.235 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:13.674 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:13.940 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:14.250 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:14.582 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:15.338 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:16.458 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:16.700 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:16.981 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:28.901 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 16:04:29.580 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface 2 0 2015-11-28 20:53:46.036 -!MESSAGE Keybinding conflicts occurred. They may interfere with normal accelerator operation. -!SUBENTRY 1 org.eclipse.jface 2 0 2015-11-28 20:53:46.036 -!MESSAGE A conflict occurred for ALT+SHIFT+ARROW_DOWN: -Binding(ALT+SHIFT+ARROW_DOWN, - ParameterizedCommand(Command(org.eclipse.jdt.ui.edit.text.java.select.last,Restore Last Selection, - Restore last selection, - Category(org.eclipse.ui.category.edit,Edit,null,true), - org.eclipse.ui.internal.MakeHandlersGo@648639f1, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.jdt.ui.javaEditorScope,,,system) -Binding(ALT+SHIFT+ARROW_DOWN, - ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.markTaskReadGoToNextUnread,Mark Task Read and Go To Next Unread Task, - , - Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), - org.eclipse.ui.internal.MakeHandlersGo@210e971e, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.mylyn.tasks.ui.views.tasks,,,system) -!SUBENTRY 1 org.eclipse.jface 2 0 2015-11-28 20:53:46.036 -!MESSAGE A conflict occurred for ALT+ARROW_DOWN: -Binding(ALT+ARROW_DOWN, - ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.goToNextUnread,Go To Next Unread Task, - , - Category(org.eclipse.ui.category.navigate,Navigate,null,true), - org.eclipse.ui.internal.MakeHandlersGo@74f827ad, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.mylyn.tasks.ui.views.tasks,,,system) -Binding(ALT+ARROW_DOWN, - ParameterizedCommand(Command(org.eclipse.ui.edit.text.moveLineDown,Move Lines Down, - Moves the selected lines down, - Category(org.eclipse.ui.category.textEditor,Text Editing,Text Editing Commands,true), - org.eclipse.ui.internal.MakeHandlersGo@1b9785aa, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.ui.textEditorScope,,,system) -!SUBENTRY 1 org.eclipse.jface 2 0 2015-11-28 20:53:46.036 -!MESSAGE A conflict occurred for ALT+SHIFT+ARROW_UP: -Binding(ALT+SHIFT+ARROW_UP, - ParameterizedCommand(Command(org.eclipse.jdt.ui.edit.text.java.select.enclosing,Select Enclosing Element, - Expand selection to include enclosing element, - Category(org.eclipse.ui.category.edit,Edit,null,true), - org.eclipse.ui.internal.MakeHandlersGo@340f4723, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.jdt.ui.javaEditorScope,,,system) -Binding(ALT+SHIFT+ARROW_UP, - ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.markTaskReadGoToPreviousUnread,Mark Task Read and Go To Previous Unread Task, - , - Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), - org.eclipse.ui.internal.MakeHandlersGo@6193a9e2, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.mylyn.tasks.ui.views.tasks,,,system) -!SUBENTRY 1 org.eclipse.jface 2 0 2015-11-28 20:53:46.036 -!MESSAGE A conflict occurred for INSERT: -Binding(INSERT, - ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.new.local.task,New Local Task, - , - Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), - org.eclipse.ui.internal.MakeHandlersGo@347074a9, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.mylyn.tasks.ui.views.tasks,,,system) -Binding(INSERT, - ParameterizedCommand(Command(org.eclipse.ui.edit.text.toggleOverwrite,Toggle Overwrite, - Toggle overwrite mode, - Category(org.eclipse.ui.category.textEditor,Text Editing,Text Editing Commands,true), - org.eclipse.ui.internal.MakeHandlersGo@136d1d58, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.ui.textEditorScope,,,system) -!SUBENTRY 1 org.eclipse.jface 2 0 2015-11-28 20:53:46.036 -!MESSAGE A conflict occurred for ALT+SHIFT+U: -Binding(ALT+SHIFT+U, - ParameterizedCommand(Command(org.eclipse.jdt.ui.edit.text.remove.occurrence.annotations,Remove Occurrence Annotations, - Removes the occurrence annotations from the current editor, - Category(org.eclipse.jdt.ui.category.source,Source,Java Source Actions,true), - org.eclipse.ui.internal.MakeHandlersGo@5d956649, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.jdt.ui.javaEditorScope,,,system) -Binding(ALT+SHIFT+U, - ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.markTaskUnread,Mark Task Unread, - , - Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), - org.eclipse.ui.internal.MakeHandlersGo@21b508a0, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.mylyn.tasks.ui.views.tasks,,,system) -!SUBENTRY 1 org.eclipse.jface 2 0 2015-11-28 20:53:46.036 -!MESSAGE A conflict occurred for ALT+ARROW_UP: -Binding(ALT+ARROW_UP, - ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.goToPreviousUnread,Go To Previous Unread Task, - , - Category(org.eclipse.ui.category.navigate,Navigate,null,true), - org.eclipse.ui.internal.MakeHandlersGo@705a8dbc, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.mylyn.tasks.ui.views.tasks,,,system) -Binding(ALT+ARROW_UP, - ParameterizedCommand(Command(org.eclipse.ui.edit.text.moveLineUp,Move Lines Up, - Moves the selected lines up, - Category(org.eclipse.ui.category.textEditor,Text Editing,Text Editing Commands,true), - org.eclipse.ui.internal.MakeHandlersGo@16d7f503, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.ui.textEditorScope,,,system) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-28 20:55:48.082 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-28 20:55:48.644 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-28 20:55:49.694 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-28 20:56:50.012 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 20:58:00.467 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 20:58:00.563 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 20:59:56.709 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 20:59:59.853 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:01.390 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:03.574 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:04.128 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:04.768 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:04.986 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:05.412 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:05.429 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:06.073 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:08.073 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:08.834 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:10.323 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:10.975 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:11.321 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:11.582 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:11.919 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:12.430 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:12.710 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:13.229 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:13.485 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:13.703 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:14.098 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:14.387 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:14.614 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:14.890 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:15.352 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:15.626 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:15.735 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:15.921 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:16.397 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:17.330 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:17.747 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:18.013 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:18.522 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:19.746 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:20.205 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:24.556 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:25.109 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:25.402 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:25.697 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:26.060 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:26.363 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:26.600 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:00:26.824 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-28 21:03:11.229 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-28 21:03:12.766 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:07:16.518 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-28 21:07:17.118 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-28 21:10:50.411 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-28 21:48:04.113 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-28 22:53:07.342 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 00:48:56.112 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 00:48:56.347 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) -!SESSION 2015-11-29 17:59:18.759 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-11-29 17:59:42.793 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-11-29 17:59:42.843 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:14.678 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:15.069 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:15.149 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:15.261 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:15.462 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:15.689 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:15.888 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:16.423 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:16.671 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:16.874 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:17.083 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:17.271 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:17.477 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:17.669 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:17.836 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:18.015 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:18.467 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:18.568 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:18.668 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:18.986 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:19.225 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:19.914 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:20.219 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:20.466 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:20.665 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:20.859 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:21.038 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:21.261 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:21.457 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:22.188 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:22.766 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:23.070 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:23.338 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:23.530 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:23.731 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:23.923 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:24.378 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:51:24.600 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:52:07.632 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:52:08.243 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:52:08.885 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:56:52.862 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-29 20:57:02.859 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:57:55.427 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 20:57:56.083 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:00:10.264 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:00:58.678 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:00:59.038 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:00.598 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:00.764 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:00.784 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:01.111 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:01.523 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:01.581 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:02.340 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:02.566 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:02.595 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:02.852 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:04.062 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:04.068 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:05.248 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:05.358 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:06.911 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:01:07.985 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-29 21:30:41.639 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:37.924 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:38.688 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:38.917 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:40.169 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:40.592 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:40.817 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:41.101 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:41.159 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:41.336 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:41.472 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:41.482 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:42.039 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:42.168 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:42.358 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:42.464 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:42.561 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:42.568 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:42.942 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:43.015 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:43.065 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:43.101 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:43.393 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:43.454 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:43.669 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:43.735 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:43.927 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:43.955 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:44.179 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:44.386 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:44.557 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:44.589 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:44.613 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:44.645 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:44.812 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:44.855 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:45.008 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:45.067 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:45.338 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:45.369 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:45.741 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-29 21:33:45.808 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-29 21:43:27.386 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) -!SESSION 2015-11-30 17:19:41.356 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-11-30 17:20:01.860 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-11-30 17:20:01.961 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.jface.text 2 0 2015-11-30 19:24:50.287 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-30 19:24:50.803 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-30 19:24:50.901 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-30 19:29:29.922 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-30 19:29:30.616 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-30 19:36:33.327 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-30 19:37:11.357 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-30 19:43:28.925 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-30 19:51:05.215 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-30 19:57:26.083 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-30 19:57:26.272 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 2 0 2015-11-30 19:57:27.324 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-30 20:00:02.213 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-30 20:27:03.890 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) - -!ENTRY org.eclipse.jface.text 4 0 2015-11-30 21:03:02.484 -!MESSAGE Unexpected runtime error while computing a text hover -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) - at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) - at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) - at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) - at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) -!SESSION 2015-12-02 20:47:16.101 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-02 20:47:35.209 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-02 20:47:35.535 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.jface.text 2 0 2015-12-02 21:57:22.898 -!MESSAGE -!STACK 0 -java.lang.StringIndexOutOfBoundsException: String index out of range: -10 - at java.lang.String.checkBounds(Unknown Source) - at java.lang.String.(Unknown Source) - at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) - at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) - at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) - at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) - at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) - at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) - at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.jst.jsp.core 2 2 2015-12-02 22:12:54.563 -!MESSAGE Taglib Index ZipException: D:/Z - Norbi cucca/0 Projektek/TheButtonMCAutoFlairProto/Spigot plugin/TheButtonAutoFlair/MANIFEST.MF error in opening zip file - -!ENTRY org.eclipse.jdt.core 4 0 2015-12-02 22:12:55.194 -!MESSAGE Invalid ZIP archive: MANIFEST.MF [in TheButtonAutoFlair] - -!ENTRY org.eclipse.jdt.core 4 0 2015-12-02 22:13:59.145 -!MESSAGE Invalid ZIP archive: MANIFEST.MF [in TheButtonAutoFlair] - -!ENTRY org.eclipse.jdt.core 4 0 2015-12-02 22:15:14.528 -!MESSAGE Invalid ZIP archive: MANIFEST.MF [in TheButtonAutoFlair] -!SESSION 2015-12-02 22:16:23.837 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-02 22:16:55.612 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-02 22:16:55.613 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. -!SESSION 2015-12-04 17:34:42.348 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 17:35:05.399 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 17:35:05.533 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.help.base 4 0 2015-12-04 17:41:30.493 -!MESSAGE Help index declared, but missing for plugin org.eclipse.rse.doc.user. -!SESSION 2015-12-04 17:44:48.552 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.ui 4 4 2015-12-04 17:45:03.497 -!MESSAGE Unable to find Action Set: adt.actionSet.wizards - -!ENTRY org.eclipse.ui 4 4 2015-12-04 17:45:03.501 -!MESSAGE Unable to find Action Set: adt.actionSet.avdManager - -!ENTRY org.eclipse.ui 4 4 2015-12-04 17:45:03.501 -!MESSAGE Unable to find Action Set: adt.actionSet.lint - -!ENTRY org.eclipse.ui 4 4 2015-12-04 17:45:03.501 -!MESSAGE Unable to find Action Set: adt.actionSet.refactorings - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 17:45:08.390 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 17:45:08.391 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.ui 2 2 2015-12-04 17:45:14.601 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.base, page: com.android.ide.eclipse.common.preferences.UsagePreferencePage) - -!ENTRY org.eclipse.ui 2 2 2015-12-04 17:45:14.601 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.ddms, page: com.android.ide.eclipse.ddms.preferences.PreferencePage) - -!ENTRY org.eclipse.ui 2 2 2015-12-04 17:45:14.602 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.ddms, page: com.android.ide.eclipse.ddms.preferences.LogCatPreferencePage) - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 17:51:46.749 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:51:46.749 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.749 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.749 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.749 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.749 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:51:46.749 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.749 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.749 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:51:46.749 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.749 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.749 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 17:51:46.755 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:51:46.756 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.756 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.756 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.756 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.756 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:51:46.756 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.756 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.756 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:51:46.756 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.756 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:51:46.756 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 17:53:56.807 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:53:56.808 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.808 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.808 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.808 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.808 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:53:56.808 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.808 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.808 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:53:56.808 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.808 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.808 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 17:53:56.810 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:53:56.810 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.810 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.810 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.810 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.810 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:53:56.810 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.810 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.810 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:53:56.810 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.810 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:53:56.810 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 17:54:07.884 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:54:07.884 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.884 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.884 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.884 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.884 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:54:07.884 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.884 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.884 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:54:07.884 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.884 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.884 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 17:54:07.886 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:54:07.886 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.886 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.886 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.886 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.886 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle org.eclipse.osgi 3.10.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:54:07.886 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.886 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.886 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:54:07.886 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.886 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:54:07.886 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] -!SESSION 2015-12-04 17:57:44.615 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.ui 4 4 2015-12-04 17:57:56.637 -!MESSAGE Unable to find Action Set: adt.actionSet.wizards - -!ENTRY org.eclipse.ui 4 4 2015-12-04 17:57:56.642 -!MESSAGE Unable to find Action Set: adt.actionSet.avdManager - -!ENTRY org.eclipse.ui 4 4 2015-12-04 17:57:56.642 -!MESSAGE Unable to find Action Set: adt.actionSet.lint - -!ENTRY org.eclipse.ui 4 4 2015-12-04 17:57:56.642 -!MESSAGE Unable to find Action Set: adt.actionSet.refactorings - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 17:58:01.586 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 17:58:01.586 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.equinox.p2.core 4 0 2015-12-04 17:58:16.812 -!MESSAGE Provisioning exception -!STACK 1 -org.eclipse.equinox.p2.core.ProvisionException: No repository found at http://mvnrepository.com/artifact/org.eclipse/osgi/3.10.0-v20140606-1445. - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.fail(AbstractRepositoryManager.java:393) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:675) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) -!SUBENTRY 1 org.eclipse.equinox.p2.metadata.repository 4 1000 2015-12-04 17:58:16.814 -!MESSAGE No repository found at http://mvnrepository.com/artifact/org.eclipse/osgi/3.10.0-v20140606-1445. - -!ENTRY org.eclipse.equinox.p2.core 4 0 2015-12-04 17:58:26.450 -!MESSAGE Provisioning exception -!STACK 1 -org.eclipse.equinox.p2.core.ProvisionException: No repository found at file:/D:/Downloads/osgi-3.10.0-v20140606-1445.jar. - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.fail(AbstractRepositoryManager.java:393) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:675) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) -!SUBENTRY 1 org.eclipse.equinox.p2.metadata.repository 4 1000 2015-12-04 17:58:26.451 -!MESSAGE No repository found at file:/D:/Downloads/osgi-3.10.0-v20140606-1445.jar. - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 17:58:40.937 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:58:40.938 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.938 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.938 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle org.eclipse.core.resources 3.9.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.938 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle org.eclipse.core.resources 3.9.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.938 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle org.eclipse.core.resources 3.9.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:58:40.938 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.938 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.938 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:58:40.938 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.938 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.938 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 17:58:40.947 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:58:40.947 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.947 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.947 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle org.eclipse.core.resources 3.9.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.947 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle org.eclipse.core.resources 3.9.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.947 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle org.eclipse.core.resources 3.9.0' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:58:40.947 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.947 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.947 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 17:58:40.947 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.947 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 17:58:40.947 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:00:30.954 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.base, page: com.android.ide.eclipse.common.preferences.UsagePreferencePage) - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:00:30.955 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.ddms, page: com.android.ide.eclipse.ddms.preferences.PreferencePage) - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:00:30.956 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.ddms, page: com.android.ide.eclipse.ddms.preferences.LogCatPreferencePage) - -!ENTRY org.eclipse.equinox.p2.core 4 0 2015-12-04 18:01:17.478 -!MESSAGE Provisioning exception -!STACK 1 -org.eclipse.equinox.p2.core.ProvisionException: No repository found at file:/D:/Downloads/osgi-3.10.0-v20140606-1445.jar. - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.fail(AbstractRepositoryManager.java:393) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:636) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) -!SUBENTRY 1 org.eclipse.equinox.p2.metadata.repository 4 1000 2015-12-04 18:01:17.478 -!MESSAGE No repository found at file:/D:/Downloads/osgi-3.10.0-v20140606-1445.jar. - -!ENTRY org.eclipse.equinox.p2.core 4 0 2015-12-04 18:03:48.987 -!MESSAGE Provisioning exception -!STACK 1 -org.eclipse.equinox.p2.core.ProvisionException: Unable to read repository at http://projects.eclipse.org/projects/birt. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:128) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) -Caused by: java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - ... 10 more -!SUBENTRY 1 org.eclipse.equinox.p2.metadata.repository 4 1002 2015-12-04 18:03:48.988 -!MESSAGE Unable to read repository at http://projects.eclipse.org/projects/birt. -!STACK 0 -java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) -!SESSION 2015-12-04 18:05:34.424 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:05:44.729 -!MESSAGE Unable to find Action Set: adt.actionSet.wizards - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:05:44.735 -!MESSAGE Unable to find Action Set: adt.actionSet.avdManager - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:05:44.736 -!MESSAGE Unable to find Action Set: adt.actionSet.lint - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:05:44.737 -!MESSAGE Unable to find Action Set: adt.actionSet.refactorings - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 18:05:51.528 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 18:05:51.529 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:06:21.758 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.base, page: com.android.ide.eclipse.common.preferences.UsagePreferencePage) - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:06:21.758 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.ddms, page: com.android.ide.eclipse.ddms.preferences.PreferencePage) - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:06:21.759 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.ddms, page: com.android.ide.eclipse.ddms.preferences.LogCatPreferencePage) - -!ENTRY org.eclipse.equinox.p2.core 4 0 2015-12-04 18:06:34.092 -!MESSAGE Provisioning exception -!STACK 1 -org.eclipse.equinox.p2.core.ProvisionException: Unable to read repository at http://projects.eclipse.org/projects/birt. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:128) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) -Caused by: java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - ... 10 more -!SUBENTRY 1 org.eclipse.equinox.p2.metadata.repository 4 1002 2015-12-04 18:06:34.093 -!MESSAGE Unable to read repository at http://projects.eclipse.org/projects/birt. -!STACK 0 -java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 18:06:48.770 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:06:48.770 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.770 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.770 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.770 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.770 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:06:48.770 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.770 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.770 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:06:48.770 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.770 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.770 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 18:06:48.778 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:06:48.779 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.779 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.779 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.779 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.779 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:06:48.779 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.779 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.779 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:06:48.779 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.779 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:06:48.779 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 18:07:58.050 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:07:58.050 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.050 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.050 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.050 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.050 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:07:58.050 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.050 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.050 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:07:58.050 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.051 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.051 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 18:07:58.052 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:07:58.052 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.052 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.052 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.052 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.052 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:07:58.052 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.052 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.052 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:07:58.052 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.052 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:07:58.052 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] -!SESSION 2015-12-04 18:08:04.903 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:08:20.287 -!MESSAGE Unable to find Action Set: adt.actionSet.wizards - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:08:20.291 -!MESSAGE Unable to find Action Set: adt.actionSet.avdManager - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:08:20.291 -!MESSAGE Unable to find Action Set: adt.actionSet.lint - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:08:20.292 -!MESSAGE Unable to find Action Set: adt.actionSet.refactorings - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 18:08:25.425 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 18:08:25.427 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.equinox.p2.core 4 0 2015-12-04 18:08:36.422 -!MESSAGE Provisioning exception -!STACK 1 -org.eclipse.equinox.p2.core.ProvisionException: Unable to read repository at http://projects.eclipse.org/projects/birt. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:128) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) -Caused by: java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - ... 10 more -!SUBENTRY 1 org.eclipse.equinox.p2.metadata.repository 4 1002 2015-12-04 18:08:36.425 -!MESSAGE Unable to read repository at http://projects.eclipse.org/projects/birt. -!STACK 0 -java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 18:08:51.690 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:08:51.690 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.690 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.690 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.690 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.690 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:08:51.690 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.690 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.690 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:08:51.690 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.690 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.690 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 18:08:51.698 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:08:51.699 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.699 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.699 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.699 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.699 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:08:51.700 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.700 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.700 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:08:51.700 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.700 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:08:51.700 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] -!SESSION 2015-12-04 18:10:17.984 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:10:33.263 -!MESSAGE Unable to find Action Set: adt.actionSet.wizards - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:10:33.268 -!MESSAGE Unable to find Action Set: adt.actionSet.avdManager - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:10:33.269 -!MESSAGE Unable to find Action Set: adt.actionSet.lint - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:10:33.269 -!MESSAGE Unable to find Action Set: adt.actionSet.refactorings - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 18:10:38.473 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 18:10:38.474 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.equinox.p2.core 4 0 2015-12-04 18:10:49.549 -!MESSAGE Provisioning exception -!STACK 1 -org.eclipse.equinox.p2.core.ProvisionException: Unable to read repository at http://projects.eclipse.org/projects/birt. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:128) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) -Caused by: java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - ... 10 more -!SUBENTRY 1 org.eclipse.equinox.p2.metadata.repository 4 1002 2015-12-04 18:10:49.551 -!MESSAGE Unable to read repository at http://projects.eclipse.org/projects/birt. -!STACK 0 -java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 18:11:05.568 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:11:05.568 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.568 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.568 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.568 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.568 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:11:05.568 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.568 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.569 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:11:05.569 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.569 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.569 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 18:11:05.578 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:11:05.578 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.578 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.578 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.578 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.578 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:11:05.578 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.578 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.578 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:11:05.578 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.578 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:11:05.578 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] -!SESSION 2015-12-04 18:14:44.644 ----------------------------------------------- -eclipse.buildId=M20130204-1200 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:15:04.134 -!MESSAGE Unable to find Action Set: adt.actionSet.wizards - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:15:04.169 -!MESSAGE Unable to find Action Set: adt.actionSet.avdManager - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:15:04.170 -!MESSAGE Unable to find Action Set: adt.actionSet.lint - -!ENTRY org.eclipse.ui 4 4 2015-12-04 18:15:04.170 -!MESSAGE Unable to find Action Set: adt.actionSet.refactorings - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 18:15:10.128 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 18:15:10.129 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.equinox.p2.core 4 0 2015-12-04 18:15:21.357 -!MESSAGE Provisioning exception -!STACK 1 -org.eclipse.equinox.p2.core.ProvisionException: Unable to read repository at http://projects.eclipse.org/projects/birt. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:128) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) -Caused by: java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - ... 10 more -!SUBENTRY 1 org.eclipse.equinox.p2.metadata.repository 4 1002 2015-12-04 18:15:21.359 -!MESSAGE Unable to read repository at http://projects.eclipse.org/projects/birt. -!STACK 0 -java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 18:15:36.465 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:15:36.465 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.466 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.466 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.466 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.466 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:15:36.466 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.466 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.466 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:15:36.466 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.466 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.466 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.equinox.p2.operations 4 0 2015-12-04 18:15:36.472 -!MESSAGE Operation details -!SUBENTRY 1 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:15:36.472 -!MESSAGE Cannot complete the install because one or more required items could not be found. -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.472 -!MESSAGE Software being installed: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.472 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.0.20150526-2032 (org.eclipse.m2e.core 1.6.0.20150526-2032) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.472 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.1.20150625-2338 (org.eclipse.m2e.core 1.6.1.20150625-2338) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.472 -!MESSAGE Missing requirement: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core 1.6.2.20150902-0002) requires 'bundle com.google.guava [14.0.1,16.0.0)' but it could not be found -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:15:36.472 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.472 -!MESSAGE From: Maven Integration for Eclipse 1.6.2.20150902-0002 (org.eclipse.m2e.core.ui 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.472 -!MESSAGE To: bundle org.eclipse.m2e.core [1.6.0,1.7.0) -!SUBENTRY 2 org.eclipse.equinox.p2.director 4 1 2015-12-04 18:15:36.472 -!MESSAGE Cannot satisfy dependency: -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.472 -!MESSAGE From: m2e - Maven Integration for Eclipse (includes Incubating components) 1.6.2.20150902-0002 (org.eclipse.m2e.feature.feature.group 1.6.2.20150902-0002) -!SUBENTRY 3 org.eclipse.equinox.p2.director 4 0 2015-12-04 18:15:36.472 -!MESSAGE To: org.eclipse.m2e.core.ui [1.6.2.20150902-0002] - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:18:41.739 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.base, page: com.android.ide.eclipse.common.preferences.UsagePreferencePage) - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:18:41.740 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.ddms, page: com.android.ide.eclipse.ddms.preferences.PreferencePage) - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:18:41.740 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.ddms, page: com.android.ide.eclipse.ddms.preferences.LogCatPreferencePage) - -!ENTRY org.eclipse.equinox.p2.core 4 0 2015-12-04 18:19:04.072 -!MESSAGE Provisioning exception -!STACK 1 -org.eclipse.equinox.p2.core.ProvisionException: Unable to read repository at http://projects.eclipse.org/projects/birt. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:128) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) -Caused by: java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - ... 10 more -!SUBENTRY 1 org.eclipse.equinox.p2.metadata.repository 4 1002 2015-12-04 18:19:04.072 -!MESSAGE Unable to read repository at http://projects.eclipse.org/projects/birt. -!STACK 0 -java.io.IOException: http://projects.eclipse.org/projects/birt is not a valid repository location. - at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:102) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:758) - at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) - at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) - at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) - at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) - at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) - -!ENTRY org.eclipse.equinox.p2.touchpoint.natives 4 0 2015-12-04 18:26:52.353 -!MESSAGE org.eclipse.equinox.internal.p2.touchpoint.natives.actions.UnzipAction error unzipping zipfile: D:\Downloads\eclipse-jee-juno-SR2-win32-x86_64\eclipse\p2\org.eclipse.equinox.p2.core\cache\binary\epp.package.jee.executable.win32.win32.x86_64_4.4.2.20150219-0708destination: D:\Downloads\eclipse-jee-juno-SR2-win32-x86_64\eclipse - -!ENTRY org.eclipse.equinox.p2.touchpoint.natives 4 0 2015-12-04 18:26:52.554 -!MESSAGE org.eclipse.equinox.internal.p2.touchpoint.natives.actions.UnzipAction error unzipping zipfile: D:\Downloads\eclipse-jee-juno-SR2-win32-x86_64\eclipse\p2\org.eclipse.equinox.p2.core\cache\binary\org.eclipse.platform.ide.executable.win32.win32.x86_64_4.4.2.M20150204-1700destination: D:\Downloads\eclipse-jee-juno-SR2-win32-x86_64\eclipse - -!ENTRY org.eclipse.equinox.p2.touchpoint.natives 4 0 2015-12-04 18:26:52.735 -!MESSAGE org.eclipse.equinox.internal.p2.touchpoint.natives.actions.UnzipAction error unzipping zipfile: D:\Downloads\eclipse-jee-juno-SR2-win32-x86_64\eclipse\p2\org.eclipse.equinox.p2.core\cache\binary\org.eclipse.rcp.configuration_root.win32.win32.x86_64_1.0.3.v20150204-1745destination: D:\Downloads\eclipse-jee-juno-SR2-win32-x86_64\eclipse -!SESSION 2015-12-04 18:27:53.304 ----------------------------------------------- -eclipse.buildId=4.4.2.M20150204-1700 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 18:29:25.593 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 18:29:25.594 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:31:49.549 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.base, page: com.android.ide.eclipse.common.preferences.UsagePreferencePage) - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:31:49.550 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.ddms, page: com.android.ide.eclipse.ddms.preferences.PreferencePage) - -!ENTRY org.eclipse.ui 2 2 2015-12-04 18:31:49.550 -!MESSAGE Invalid preference category path: com.android.ide.eclipse.preferences.main (bundle: com.android.ide.eclipse.ddms, page: com.android.ide.eclipse.ddms.preferences.LogCatPreferencePage) - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:50:31.696 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:50:31.725 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:50:34.085 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:50:34.109 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:50:35.484 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:50:35.490 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:53:18.208 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:53:18.213 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.wst.sse.core 4 4 2015-12-04 18:55:16.461 -!MESSAGE Invalid thread access -!STACK 0 -org.eclipse.swt.SWTException: Invalid thread access - at org.eclipse.swt.SWT.error(SWT.java:4441) - at org.eclipse.swt.SWT.error(SWT.java:4356) - at org.eclipse.swt.SWT.error(SWT.java:4327) - at org.eclipse.swt.widgets.Widget.error(Widget.java:476) - at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:367) - at org.eclipse.swt.widgets.Table.setRedraw(Table.java:4784) - at org.eclipse.jface.viewers.AbstractTableViewer.inputChanged(AbstractTableViewer.java:562) - at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:292) - at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1675) - at org.eclipse.m2e.editor.composites.ListEditorComposite.setInput(ListEditorComposite.java:135) - at org.eclipse.m2e.editor.composites.DependenciesComposite.setDependenciesInput(DependenciesComposite.java:823) - at org.eclipse.m2e.editor.composites.DependenciesComposite.loadData(DependenciesComposite.java:588) - at org.eclipse.m2e.editor.pom.DependenciesPage.loadData(DependenciesPage.java:94) - at org.eclipse.m2e.editor.pom.MavenPomEditorPage$1.modelChanged(MavenPomEditorPage.java:137) - at org.eclipse.wst.sse.core.internal.model.AbstractStructuredModel.fireModelChanged(AbstractStructuredModel.java:526) - at org.eclipse.wst.sse.core.internal.model.AbstractStructuredModel.internalModelChanged(AbstractStructuredModel.java:837) - at org.eclipse.wst.sse.core.internal.model.AbstractStructuredModel.changedModel(AbstractStructuredModel.java:361) - at org.eclipse.wst.xml.core.internal.document.DOMModelImpl.changedModel(DOMModelImpl.java:171) - at org.eclipse.m2e.core.ui.internal.editing.PomEdits.performOnDOMDocument(PomEdits.java:518) - at org.eclipse.m2e.editor.dialogs.ManageDependenciesDialog$2.run(ManageDependenciesDialog.java:264) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:55:18.059 -!MESSAGE The POM for org.spigotmc:spigot-api:jar:1.8.7-R0.1-SNAPSHOT is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:55:18.156 -!MESSAGE The POM for org.spigotmc:spigot-api:jar:1.8.7-R0.1-SNAPSHOT is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:55:18.181 -!MESSAGE The POM for org.spigotmc:spigot-api:jar:1.8.7-R0.1-SNAPSHOT is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:55:18.421 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:55:18.427 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 4 0 2015-12-04 18:55:50.039 -!MESSAGE Could not resolve artifact org.spigotmc:spigot-api:pom:1.8.7-R0.1-SNAPSHOT -!STACK 1 -org.eclipse.core.runtime.CoreException: Could not resolve artifact org.spigotmc:spigot-api:pom:1.8.7-R0.1-SNAPSHOT - at org.eclipse.m2e.core.internal.embedder.MavenImpl$5.call(MavenImpl.java:776) - at org.eclipse.m2e.core.internal.embedder.MavenImpl$5.call(MavenImpl.java:1) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.resolve(MavenImpl.java:743) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.resolve(MavenImpl.java:720) - at org.eclipse.m2e.core.ui.internal.actions.OpenPomAction.openPomEditor(OpenPomAction.java:243) - at org.eclipse.m2e.core.ui.internal.actions.OpenPomAction.openEditor(OpenPomAction.java:218) - at org.eclipse.m2e.core.ui.internal.actions.OpenPomAction$1.run(OpenPomAction.java:129) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) -Contains: Missing org.spigotmc:spigot-api:pom:1.8.7-R0.1-SNAPSHOT -!SUBENTRY 1 org.eclipse.m2e.core 4 -1 2015-12-04 18:55:50.040 -!MESSAGE Could not resolve artifact org.spigotmc:spigot-api:pom:1.8.7-R0.1-SNAPSHOT -!SUBENTRY 2 org.eclipse.m2e.core 4 -1 2015-12-04 18:55:50.040 -!MESSAGE Missing org.spigotmc:spigot-api:pom:1.8.7-R0.1-SNAPSHOT - -!ENTRY org.eclipse.m2e.logback.appender 4 0 2015-12-04 18:56:44.644 -!MESSAGE Could not resolve artifact org.spigotmc:spigot-api:pom:1.8.7-R0.1-SNAPSHOT -!STACK 1 -org.eclipse.core.runtime.CoreException: Could not resolve artifact org.spigotmc:spigot-api:pom:1.8.7-R0.1-SNAPSHOT - at org.eclipse.m2e.core.internal.embedder.MavenImpl$5.call(MavenImpl.java:776) - at org.eclipse.m2e.core.internal.embedder.MavenImpl$5.call(MavenImpl.java:1) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.resolve(MavenImpl.java:743) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.resolve(MavenImpl.java:720) - at org.eclipse.m2e.core.ui.internal.actions.OpenPomAction.openPomEditor(OpenPomAction.java:243) - at org.eclipse.m2e.core.ui.internal.actions.OpenPomAction.openEditor(OpenPomAction.java:218) - at org.eclipse.m2e.editor.pom.DependencyTreePage$3.open(DependencyTreePage.java:315) - at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:853) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50) - at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:178) - at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:850) - at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1142) - at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1249) - at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:278) - at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:272) - at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:313) - at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) - at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353) - at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061) - at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172) - at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761) - at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151) - at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) - at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032) - at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148) - at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636) - at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) - at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579) - at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) - at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135) - at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) - at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) - at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) - at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380) - at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) - at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) - at java.lang.reflect.Method.invoke(Unknown Source) - at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648) - at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603) - at org.eclipse.equinox.launcher.Main.run(Main.java:1465) -Contains: Missing org.spigotmc:spigot-api:pom:1.8.7-R0.1-SNAPSHOT -!SUBENTRY 1 org.eclipse.m2e.core 4 -1 2015-12-04 18:56:44.645 -!MESSAGE Could not resolve artifact org.spigotmc:spigot-api:pom:1.8.7-R0.1-SNAPSHOT -!SUBENTRY 2 org.eclipse.m2e.core 4 -1 2015-12-04 18:56:44.645 -!MESSAGE Missing org.spigotmc:spigot-api:pom:1.8.7-R0.1-SNAPSHOT - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:58:45.626 -!MESSAGE The POM for org.spigotmc:spigot-api:jar:1.8.7-R0.1-SNAPSHOT is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:58:45.715 -!MESSAGE The POM for org.spigotmc:spigot-api:jar:1.8.7-R0.1-SNAPSHOT is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:58:45.732 -!MESSAGE The POM for org.spigotmc:spigot-api:jar:1.8.7-R0.1-SNAPSHOT is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:58:45.963 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:58:45.978 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:58:48.307 -!MESSAGE The POM for org.spigotmc:spigot-api:jar:1.8.7-R0.1-SNAPSHOT is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:58:48.417 -!MESSAGE The POM for org.spigotmc:spigot-api:jar:1.8.7-R0.1-SNAPSHOT is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:58:48.436 -!MESSAGE The POM for org.spigotmc:spigot-api:jar:1.8.7-R0.1-SNAPSHOT is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:58:48.686 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 18:58:48.690 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:00:27.259 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:00:27.276 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:03:44.133 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:03:44.138 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:03:45.514 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:03:45.528 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:11:24.982 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:11:24.990 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:12:07.675 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:12:07.681 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:12:23.125 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:12:23.131 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:12:24.460 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:12:24.472 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:13:43.164 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:13:43.171 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! -!SESSION 2015-12-04 19:16:01.190 ----------------------------------------------- -eclipse.buildId=4.4.2.M20150204-1700 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 19:16:34.207 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 19:16:34.208 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:16:41.221 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:16:41.249 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:20:14.439 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:20:14.450 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:20:47.063 -!MESSAGE The POM for htmlcleaner:htmlcleaner:jar:2.16 is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:20:47.068 -!MESSAGE The POM for htmlcleaner:htmlcleaner:jar:2.16 is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:20:48.106 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:20:48.112 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:11.999 -!MESSAGE The POM for htmlcleaner:htmlcleaner:jar:2.16 is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:12.920 -!MESSAGE The POM for htmlcleaner:htmlcleaner:jar:2.16 is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:13.435 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:13.442 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:14.633 -!MESSAGE The POM for htmlcleaner:htmlcleaner:jar:2.16 is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:14.670 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:14.672 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:22.706 -!MESSAGE The POM for htmlcleaner:htmlcleaner:jar:2.16 is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:23.140 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:23.145 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:42.312 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:42.348 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:44.317 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:21:44.341 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:22:10.338 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:22:10.345 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:23:12.761 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:23:12.764 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:23:38.736 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:23:38.761 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:25:24.731 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 19:25:24.741 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:16:56.567 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:16:56.575 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:17:04.872 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:17:04.882 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:17:37.163 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:17:37.169 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:17:59.144 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:17:59.148 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:18:11.759 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:18:11.767 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:22:50.841 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:22:50.847 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:30:39.150 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:30:39.153 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:31:33.707 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:31:33.718 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:31:53.794 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:31:53.797 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:32:34.244 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:32:34.246 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:36:08.747 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:36:08.749 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 4 0 2015-12-04 20:48:41.822 -!MESSAGE Could not read pom.xml -!STACK 1 -org.eclipse.core.runtime.CoreException: Could not read pom.xml - at org.eclipse.m2e.core.internal.embedder.MavenImpl.readModel(MavenImpl.java:565) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.readModel(MavenImpl.java:574) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refreshPhase2(ProjectRegistryManager.java:541) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:497) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:350) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:297) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.getProjectFacade(MavenBuilder.java:154) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:89) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86) - at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200) - at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) - at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:263) - at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:401) - at org.eclipse.core.internal.resources.Project$1.run(Project.java:618) - at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2313) - at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:597) - at org.eclipse.core.internal.resources.Project.build(Project.java:114) - at org.eclipse.jdt.internal.ui.jarpackager.JarFileExportOperation.buildProjects(JarFileExportOperation.java:1159) - at org.eclipse.jdt.internal.ui.jarpackager.JarFileExportOperation.singleRun(JarFileExportOperation.java:1006) - at org.eclipse.jdt.internal.ui.jarpackager.JarFileExportOperation.execute(JarFileExportOperation.java:987) - at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) - at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2313) - at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) - at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:122) -Caused by: org.apache.maven.model.io.ModelParseException: Duplicated tag: 'build' (position: START_TAG seen ...\r\n ... @44:10) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:130) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:94) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.readModel(MavenImpl.java:563) - ... 32 more -Caused by: org.codehaus.plexus.util.xml.pull.XmlPullParserException: Duplicated tag: 'build' (position: START_TAG seen ...\r\n ... @44:10) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.checkFieldWithDuplicate(MavenXpp3Reader.java:114) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2237) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3807) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:557) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:125) - ... 34 more -!SUBENTRY 1 org.eclipse.m2e.core 4 -1 2015-12-04 20:48:41.823 -!MESSAGE Could not read pom.xml -!STACK 0 -org.apache.maven.model.io.ModelParseException: Duplicated tag: 'build' (position: START_TAG seen ...\r\n ... @44:10) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:130) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:94) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.readModel(MavenImpl.java:563) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.readModel(MavenImpl.java:574) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refreshPhase2(ProjectRegistryManager.java:541) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:497) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:350) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:297) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.getProjectFacade(MavenBuilder.java:154) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:89) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86) - at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200) - at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) - at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:263) - at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:401) - at org.eclipse.core.internal.resources.Project$1.run(Project.java:618) - at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2313) - at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:597) - at org.eclipse.core.internal.resources.Project.build(Project.java:114) - at org.eclipse.jdt.internal.ui.jarpackager.JarFileExportOperation.buildProjects(JarFileExportOperation.java:1159) - at org.eclipse.jdt.internal.ui.jarpackager.JarFileExportOperation.singleRun(JarFileExportOperation.java:1006) - at org.eclipse.jdt.internal.ui.jarpackager.JarFileExportOperation.execute(JarFileExportOperation.java:987) - at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) - at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2313) - at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) - at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:122) -Caused by: org.codehaus.plexus.util.xml.pull.XmlPullParserException: Duplicated tag: 'build' (position: START_TAG seen ...\r\n ... @44:10) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.checkFieldWithDuplicate(MavenXpp3Reader.java:114) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2237) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3807) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:557) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:125) - ... 34 more - -!ENTRY org.eclipse.m2e.logback.appender 4 0 2015-12-04 20:48:43.904 -!MESSAGE Could not read pom.xml -!STACK 1 -org.eclipse.core.runtime.CoreException: Could not read pom.xml - at org.eclipse.m2e.core.internal.embedder.MavenImpl.readModel(MavenImpl.java:565) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.readModel(MavenImpl.java:574) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refreshPhase2(ProjectRegistryManager.java:541) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:497) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:350) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:297) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.getProjectFacade(MavenBuilder.java:154) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:89) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86) - at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200) - at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) - at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302) - at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358) - at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381) - at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) - at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) -Caused by: org.apache.maven.model.io.ModelParseException: Duplicated tag: 'build' (position: START_TAG seen ...\r\n ... @44:10) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:130) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:94) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.readModel(MavenImpl.java:563) - ... 24 more -Caused by: org.codehaus.plexus.util.xml.pull.XmlPullParserException: Duplicated tag: 'build' (position: START_TAG seen ...\r\n ... @44:10) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.checkFieldWithDuplicate(MavenXpp3Reader.java:114) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2237) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3807) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:557) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:125) - ... 26 more -!SUBENTRY 1 org.eclipse.m2e.core 4 -1 2015-12-04 20:48:43.904 -!MESSAGE Could not read pom.xml -!STACK 0 -org.apache.maven.model.io.ModelParseException: Duplicated tag: 'build' (position: START_TAG seen ...\r\n ... @44:10) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:130) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:94) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.readModel(MavenImpl.java:563) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.readModel(MavenImpl.java:574) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refreshPhase2(ProjectRegistryManager.java:541) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:497) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:350) - at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:297) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.getProjectFacade(MavenBuilder.java:154) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:89) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99) - at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86) - at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200) - at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) - at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302) - at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358) - at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381) - at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) - at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) -Caused by: org.codehaus.plexus.util.xml.pull.XmlPullParserException: Duplicated tag: 'build' (position: START_TAG seen ...\r\n ... @44:10) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.checkFieldWithDuplicate(MavenXpp3Reader.java:114) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2237) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3807) - at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:557) - at org.apache.maven.model.io.DefaultModelReader.read(DefaultModelReader.java:125) - ... 26 more - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:49:25.634 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:49:25.639 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:49:28.668 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:49:28.684 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:51:21.844 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:51:21.850 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:56:08.784 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:56:08.788 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:56:31.719 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:56:31.721 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:57:18.366 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:57:18.368 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:57:21.176 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:57:21.179 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:59:55.337 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 20:59:55.354 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:04:46.553 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:04:46.557 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:07:43.287 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:07:43.297 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:07:57.407 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:07:57.412 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:10:39.899 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:10:39.903 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:15:43.801 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:15:43.818 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:16:32.381 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:16:32.389 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:16:42.780 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:16:42.786 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 4 0 2015-12-04 21:20:39.443 -!MESSAGE Could not resolve artifact htmlcleaner:htmlcleaner:pom:2.16 -!STACK 1 -org.eclipse.core.runtime.CoreException: Could not resolve artifact htmlcleaner:htmlcleaner:pom:2.16 - at org.eclipse.m2e.core.internal.embedder.MavenImpl$5.call(MavenImpl.java:776) - at org.eclipse.m2e.core.internal.embedder.MavenImpl$5.call(MavenImpl.java:1) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151) - at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.resolve(MavenImpl.java:743) - at org.eclipse.m2e.core.internal.embedder.MavenImpl.resolve(MavenImpl.java:720) - at org.eclipse.m2e.core.ui.internal.actions.OpenPomAction.openPomEditor(OpenPomAction.java:243) - at org.eclipse.m2e.core.ui.internal.actions.OpenPomAction.openEditor(OpenPomAction.java:218) - at org.eclipse.m2e.editor.xml.PomHyperlinkDetector$6$1.run(PomHyperlinkDetector.java:616) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) -Contains: Missing htmlcleaner:htmlcleaner:pom:2.16 -!SUBENTRY 1 org.eclipse.m2e.core 4 -1 2015-12-04 21:20:39.444 -!MESSAGE Could not resolve artifact htmlcleaner:htmlcleaner:pom:2.16 -!SUBENTRY 2 org.eclipse.m2e.core 4 -1 2015-12-04 21:20:39.444 -!MESSAGE Missing htmlcleaner:htmlcleaner:pom:2.16 - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:20:50.009 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:20:50.024 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:22:06.752 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:22:06.760 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:22:08.169 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:22:08.184 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.wst.sse.core 4 4 2015-12-04 21:22:49.039 -!MESSAGE Invalid thread access -!STACK 0 -org.eclipse.swt.SWTException: Invalid thread access - at org.eclipse.swt.SWT.error(SWT.java:4441) - at org.eclipse.swt.SWT.error(SWT.java:4356) - at org.eclipse.swt.SWT.error(SWT.java:4327) - at org.eclipse.swt.widgets.Widget.error(Widget.java:476) - at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:367) - at org.eclipse.swt.widgets.Table.setRedraw(Table.java:4784) - at org.eclipse.jface.viewers.AbstractTableViewer.inputChanged(AbstractTableViewer.java:562) - at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:292) - at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1675) - at org.eclipse.m2e.editor.composites.ListEditorComposite.setInput(ListEditorComposite.java:135) - at org.eclipse.m2e.editor.composites.DependenciesComposite.setDependenciesInput(DependenciesComposite.java:823) - at org.eclipse.m2e.editor.composites.DependenciesComposite.loadData(DependenciesComposite.java:588) - at org.eclipse.m2e.editor.pom.DependenciesPage.loadData(DependenciesPage.java:94) - at org.eclipse.m2e.editor.pom.MavenPomEditorPage$1.modelChanged(MavenPomEditorPage.java:137) - at org.eclipse.wst.sse.core.internal.model.AbstractStructuredModel.fireModelChanged(AbstractStructuredModel.java:526) - at org.eclipse.wst.sse.core.internal.model.AbstractStructuredModel.internalModelChanged(AbstractStructuredModel.java:837) - at org.eclipse.wst.sse.core.internal.model.AbstractStructuredModel.changedModel(AbstractStructuredModel.java:361) - at org.eclipse.wst.xml.core.internal.document.DOMModelImpl.changedModel(DOMModelImpl.java:171) - at org.eclipse.m2e.core.ui.internal.editing.PomEdits.performOnDOMDocument(PomEdits.java:518) - at org.eclipse.m2e.editor.dialogs.ManageDependenciesDialog$2.run(ManageDependenciesDialog.java:264) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:22:50.718 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:22:50.737 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:39:08.916 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:39:08.929 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:40:23.454 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:40:23.494 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:40:43.742 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:40:43.749 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:40:46.252 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:40:46.258 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:40:53.690 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:40:53.725 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:40:55.168 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:40:55.182 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:41:21.113 -!MESSAGE The POM for org.spigotmc:spigot-api:jar: is missing, no dependency information available - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:42:24.529 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:42:24.552 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:42:25.848 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:42:25.876 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:42:35.820 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:42:35.826 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:49:41.401 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:49:41.403 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:50:38.948 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:50:38.961 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:50:43.661 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:50:43.666 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:50:46.877 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:50:46.881 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:50:50.824 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:50:50.827 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:51:44.507 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:51:44.512 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:52:47.267 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:52:47.272 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:53:23.537 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:53:23.541 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:53:38.591 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:53:38.595 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:53:41.614 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:53:41.619 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:53:49.777 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:53:49.781 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:54:12.527 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:54:12.531 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:56:31.780 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:56:31.785 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:56:52.403 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:56:52.418 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:57:14.442 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:57:14.448 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:57:48.226 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:57:48.228 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:58:10.193 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 21:58:10.198 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:07:16.565 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:07:16.570 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:09:55.751 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:09:55.758 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:10:20.010 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:10:20.014 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:10:21.128 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:10:21.133 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:12:56.291 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:12:56.295 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:18.020 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:18.024 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:22.656 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:22.675 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:28.002 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:28.007 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:31.668 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:31.672 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:33.225 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:33.229 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:35.750 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:13:35.755 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:14:22.267 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:14:22.271 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:15:21.225 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:15:21.235 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! diff --git a/.metadata/.lock b/.metadata/.lock deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.log b/.metadata/.log deleted file mode 100644 index de3929c..0000000 --- a/.metadata/.log +++ /dev/null @@ -1,1134 +0,0 @@ -!SESSION 2015-12-04 19:16:01.190 ----------------------------------------------- -eclipse.buildId=4.4.2.M20150204-1700 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -This is a continuation of log file D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\.metadata\.bak_0.log -Created Time: 2015-12-04 22:17:52.296 - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:17:52.297 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:17:52.302 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:18:09.589 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:18:09.593 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:18:25.430 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:18:25.435 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:18:34.048 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:18:34.051 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:03.942 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:03.946 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:13.394 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:13.397 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:17.520 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:17.525 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:24.536 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:24.540 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:32.732 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:32.736 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:46.909 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:46.912 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:53.526 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:21:53.531 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:22:05.040 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:22:05.044 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:22:13.589 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:22:13.592 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:23:47.614 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:23:47.618 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:23:52.173 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:23:52.176 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:24:31.567 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:24:31.571 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:26:08.955 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:26:08.959 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:39:23.494 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:39:23.499 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:39:29.700 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:39:29.704 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:43:10.036 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:43:10.038 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:45:28.086 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:45:28.090 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:45:34.057 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:45:34.061 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:45:35.151 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 22:45:35.155 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:05:36.243 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:05:36.247 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:20:47.064 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:20:47.069 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! -!SESSION 2015-12-04 23:25:13.351 ----------------------------------------------- -eclipse.buildId=4.4.2.M20150204-1700 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 23:25:59.102 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-04 23:25:59.103 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:30:12.749 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:30:12.777 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:30:40.382 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:30:40.399 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:43:18.904 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:43:18.906 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:45:57.784 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:45:57.790 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:47:06.633 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:47:06.639 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:47:43.260 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:47:43.266 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:47:56.933 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:47:56.937 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:48:07.312 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:48:07.317 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:48:10.334 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-04 23:48:10.339 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! -!SESSION 2015-12-05 15:05:11.156 ----------------------------------------------- -eclipse.buildId=4.4.2.M20150204-1700 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-05 15:07:21.089 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-05 15:07:21.269 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:09:58.558 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:09:58.618 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:10:00.044 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:10:00.112 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:10:15.382 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:10:15.392 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:10:16.604 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:10:16.604 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:10:25.851 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:10:25.857 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:20:44.814 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:20:44.820 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:13.698 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:13.707 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:20.333 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:20.340 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:21.822 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:21.827 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:29.611 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:29.616 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:33.695 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:33.700 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:37.799 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:21:37.805 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:25:35.369 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:25:35.376 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:25:47.344 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:25:47.348 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:26:02.270 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 15:26:02.274 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! -!SESSION 2015-12-05 22:28:08.641 ----------------------------------------------- -eclipse.buildId=4.4.2.M20150204-1700 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-05 22:40:31.273 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-05 22:40:31.530 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 22:47:48.059 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-05 22:47:48.356 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! -!SESSION 2015-12-09 19:45:03.553 ----------------------------------------------- -eclipse.buildId=4.4.2.M20150204-1700 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-09 19:46:36.976 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-09 19:46:37.244 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. -!SESSION 2015-12-09 20:40:27.682 ----------------------------------------------- -eclipse.buildId=4.4.2.M20150204-1700 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-09 20:41:38.867 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-09 20:41:39.095 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-09 20:43:25.207 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-09 20:43:25.257 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-09 20:43:27.558 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-09 20:43:27.594 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-09 20:43:29.067 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-09 20:43:29.072 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! -!SESSION 2015-12-12 19:04:11.053 ----------------------------------------------- -eclipse.buildId=4.4.2.M20150204-1700 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-12 19:08:05.944 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-12 19:08:06.083 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. -!SESSION 2015-12-18 22:41:48.612 ----------------------------------------------- -eclipse.buildId=4.4.2.M20150204-1700 -java.version=1.8.0_66 -java.vendor=Oracle Corporation -BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US -Framework arguments: -product org.eclipse.epp.package.jee.product -product org.eclipse.epp.package.jee.product -Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -data D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin -product org.eclipse.epp.package.jee.product - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-18 22:42:33.583 -!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level -Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. -The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in -this system level configuration. The Git installation location can be configured on the -Team > Git > Configuration preference page's 'System Settings' tab. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.egit.ui 2 0 2015-12-18 22:42:33.610 -!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git -user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is -not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and -EGit might behave differently since they see different configuration options. -This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 22:47:51.439 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 22:47:51.501 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:15:29.651 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:15:29.662 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:16:46.383 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:16:46.389 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:18:04.390 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:18:04.429 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:39:23.142 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:39:23.196 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:39:31.232 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:39:31.239 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:39:45.705 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:39:45.710 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:40:20.361 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:40:20.365 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:40:21.500 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:40:21.504 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:42:09.154 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:42:09.159 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:42:15.455 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:42:15.459 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:42:17.057 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:42:17.062 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:42:34.857 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:42:34.862 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:42:37.056 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-18 23:42:37.061 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:13:44.576 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:13:44.592 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:13:49.490 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:13:49.506 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:15:22.930 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:15:22.930 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:15:26.446 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:15:26.462 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:15:50.762 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:15:50.778 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:16:29.381 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:16:29.381 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:17:40.556 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:17:40.556 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:18:18.610 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:18:18.610 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:18:20.172 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:18:20.172 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:18:30.770 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:18:30.770 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:19:45.890 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:19:45.890 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:20:58.882 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:20:58.897 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:31:13.566 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:31:13.566 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:33:35.254 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:33:35.254 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:34:07.890 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:34:07.890 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:34:35.365 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:34:35.365 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:34:39.826 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:34:39.826 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:36:20.441 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:36:20.456 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:37:39.000 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:37:39.004 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:38:11.294 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:38:11.301 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:38:24.122 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:38:24.126 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:38:48.499 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:38:48.503 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:39:01.033 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:39:01.037 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:40:34.660 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:40:34.664 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:40:51.077 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:40:51.081 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:40:57.295 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:40:57.299 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:41:23.315 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:41:23.320 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:41:26.102 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 12:41:26.107 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:09:02.195 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:09:02.200 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:09:26.128 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:09:26.138 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:09:52.697 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:09:52.702 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:09:56.989 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:09:56.993 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:10:19.664 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:10:19.669 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:10:41.065 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:10:41.070 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:11:05.901 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:11:05.905 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:11:09.396 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:11:09.401 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:11:34.221 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:11:34.225 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:11:38.178 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:11:38.182 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:11:39.586 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:11:39.591 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:12:08.072 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:12:08.075 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:12:34.487 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:12:34.490 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:12:35.584 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:12:35.588 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:12:54.763 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:12:54.767 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:13:03.352 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:13:03.357 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:13:10.419 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:13:10.423 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:13:40.495 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:13:40.499 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:13:59.645 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:13:59.649 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:14:26.373 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:14:26.377 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:17:34.301 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:17:34.306 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:18:12.377 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:18:12.382 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:18:23.999 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:18:24.003 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:22:31.352 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:22:31.357 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:22:32.703 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:22:32.706 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.jdt.core 4 4 2015-12-19 13:22:41.910 -!MESSAGE JavaBuilder handling CoreException -!STACK 1 -org.eclipse.core.runtime.CoreException: Could not write file: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\target\classes\tk\sznp\thebuttonautoflair\Commands$2.class. - at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:55) - at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:406) - at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:1101) - at org.eclipse.core.internal.resources.File.internalSetContents(File.java:322) - at org.eclipse.core.internal.resources.File.setContents(File.java:361) - at org.eclipse.core.internal.resources.File.setContents(File.java:465) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.writeClassFileContents(IncrementalImageBuilder.java:836) - at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.writeClassFile(AbstractImageBuilder.java:859) - at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.acceptResult(AbstractImageBuilder.java:190) - at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:510) - at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:367) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.compile(IncrementalImageBuilder.java:330) - at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:304) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:135) - at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:267) - at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:195) - at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) - at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302) - at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358) - at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381) - at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) - at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) -Caused by: java.io.FileNotFoundException: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\target\classes\tk\sznp\thebuttonautoflair\Commands$2.class (The process cannot access the file because it is being used by another process) - at java.io.FileOutputStream.open0(Native Method) - at java.io.FileOutputStream.open(Unknown Source) - at java.io.FileOutputStream.(Unknown Source) - at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:397) - ... 26 more -!SUBENTRY 1 org.eclipse.core.filesystem 4 272 2015-12-19 13:22:42.073 -!MESSAGE Could not write file: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\target\classes\tk\sznp\thebuttonautoflair\Commands$2.class. -!STACK 0 -java.io.FileNotFoundException: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\target\classes\tk\sznp\thebuttonautoflair\Commands$2.class (The process cannot access the file because it is being used by another process) - at java.io.FileOutputStream.open0(Native Method) - at java.io.FileOutputStream.open(Unknown Source) - at java.io.FileOutputStream.(Unknown Source) - at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:397) - at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:1101) - at org.eclipse.core.internal.resources.File.internalSetContents(File.java:322) - at org.eclipse.core.internal.resources.File.setContents(File.java:361) - at org.eclipse.core.internal.resources.File.setContents(File.java:465) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.writeClassFileContents(IncrementalImageBuilder.java:836) - at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.writeClassFile(AbstractImageBuilder.java:859) - at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.acceptResult(AbstractImageBuilder.java:190) - at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:510) - at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:367) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.compile(IncrementalImageBuilder.java:330) - at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:304) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:135) - at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:267) - at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:195) - at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) - at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302) - at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358) - at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381) - at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) - at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) - -!ENTRY org.eclipse.jdt.core 4 4 2015-12-19 13:22:42.159 -!MESSAGE JavaBuilder handling ImageBuilderInternalException while building: TheButtonAutoFlair -!STACK 1 -org.eclipse.core.internal.resources.ResourceException: Problems encountered while deleting resources. - at org.eclipse.core.internal.resources.Resource.delete(Resource.java:816) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeClassFile(IncrementalImageBuilder.java:758) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeSecondaryTypes(IncrementalImageBuilder.java:771) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:136) - at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:267) - at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:195) - at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) - at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302) - at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358) - at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381) - at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) - at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) -Contains: Could not delete 'D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\target\classes\tk\sznp\thebuttonautoflair\Commands$2.class'. -org.eclipse.core.runtime.CoreException: Problems encountered while deleting files. - at org.eclipse.core.internal.filesystem.local.LocalFile.delete(LocalFile.java:131) - at org.eclipse.core.internal.resources.ResourceTree.internalDeleteFile(ResourceTree.java:304) - at org.eclipse.core.internal.resources.ResourceTree.standardDeleteFile(ResourceTree.java:785) - at org.eclipse.core.internal.resources.Resource.unprotectedDelete(Resource.java:1979) - at org.eclipse.core.internal.resources.Resource.delete(Resource.java:803) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeClassFile(IncrementalImageBuilder.java:758) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeSecondaryTypes(IncrementalImageBuilder.java:771) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:136) - at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:267) - at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:195) - at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) - at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302) - at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358) - at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381) - at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) - at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) -Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\target\classes\tk\sznp\thebuttonautoflair\Commands$2.class. -!SUBENTRY 1 org.eclipse.core.resources 4 273 2015-12-19 13:22:42.160 -!MESSAGE Problems encountered while deleting resources. -!SUBENTRY 2 org.eclipse.core.resources 4 273 2015-12-19 13:22:42.160 -!MESSAGE Could not delete 'D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\target\classes\tk\sznp\thebuttonautoflair\Commands$2.class'. -!STACK 1 -org.eclipse.core.runtime.CoreException: Problems encountered while deleting files. - at org.eclipse.core.internal.filesystem.local.LocalFile.delete(LocalFile.java:131) - at org.eclipse.core.internal.resources.ResourceTree.internalDeleteFile(ResourceTree.java:304) - at org.eclipse.core.internal.resources.ResourceTree.standardDeleteFile(ResourceTree.java:785) - at org.eclipse.core.internal.resources.Resource.unprotectedDelete(Resource.java:1979) - at org.eclipse.core.internal.resources.Resource.delete(Resource.java:803) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeClassFile(IncrementalImageBuilder.java:758) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeSecondaryTypes(IncrementalImageBuilder.java:771) - at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:136) - at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:267) - at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:195) - at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) - at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302) - at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358) - at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381) - at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) - at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) -Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\target\classes\tk\sznp\thebuttonautoflair\Commands$2.class. -!SUBENTRY 3 org.eclipse.core.filesystem 4 273 2015-12-19 13:22:42.160 -!MESSAGE Problems encountered while deleting files. -!SUBENTRY 4 org.eclipse.core.filesystem 4 273 2015-12-19 13:22:42.160 -!MESSAGE Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\target\classes\tk\sznp\thebuttonautoflair\Commands$2.class. - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:22:42.166 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:22:42.170 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:22:48.431 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:22:48.437 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:22:59.183 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:22:59.186 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:23:12.683 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:23:12.687 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:27:22.358 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:27:22.362 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:28:23.756 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:28:23.760 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:10.484 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:10.488 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:23.446 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:23.449 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:32.163 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:32.167 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:36.305 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:36.308 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:38.423 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:38.427 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:43.697 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:29:43.701 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:30:49.811 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:30:49.814 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:33:56.803 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:33:56.808 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:34:07.750 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:34:07.754 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:35:30.537 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! - -!ENTRY org.eclipse.m2e.logback.appender 2 0 2015-12-19 13:35:30.541 -!MESSAGE Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! diff --git a/.metadata/.mylyn/.taskListIndex/segments.gen b/.metadata/.mylyn/.taskListIndex/segments.gen deleted file mode 100644 index 63a7ec9a3ce3e4c844ffb7c8dd88e6eb3ff32ef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20 QcmezW|NlP*2w;TK07=6G{r~^~ diff --git a/.metadata/.mylyn/.taskListIndex/segments_1 b/.metadata/.mylyn/.taskListIndex/segments_1 deleted file mode 100644 index de74fdfb0123fb69aaa1e68289d0203e9081814f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 acmezW|NnOe21dV$&pXT*(7@itXHx;W#R)S2 diff --git a/.metadata/.mylyn/.tasks.xml.zip b/.metadata/.mylyn/.tasks.xml.zip deleted file mode 100644 index 29f663eedc6dfec3ea069bdf8143cbebccffc5d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmWIWW@Zs#;Nak3;8|Vk&VU4Xfb5dQ;_RHv;u5`z+?>rD*Pl2WsNt=vb?(gh&7nqD zj01u^&U&BoKY7M`dngxg;pMFXK^l6VXS_YnoILNnHT2Z!@J-t{b9(BW`*u=CFOZ}8 zr3urkmJVz6X-k$p7Z25{U?_dcu(joxs&k9c>Y(5$B7cO64Ozav&H0j;c8ifAz?+>z sI9JxV0O*b>Kpf!B$Rxsma4WJL$gQXV+2sM=tZX1zMj*5T(yPEq0jM@f6#xJL diff --git a/.metadata/.mylyn/repositories.xml.zip b/.metadata/.mylyn/repositories.xml.zip deleted file mode 100644 index d205b3511dac347cceeb6e91e2c49dbd8a43e3b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435 zcmWIWW@Zs#;Nak32&sPW#()F_fb62wg8bsllKi5~)MCAg+?=-|zWz*x0)Mq<-+P_arJh}t;*WZ_q?l{UA>RWC`Z5V*>!39 zDu?i&w{{&{G5zD;qidzUR3|^UDa>|0tY*uJqsfydJSjC_&iAh5=$T!&R(NJjo5m3` zQAzTvn$VARI>ob1!%~NYs7!>H6}Dg zK6n^+`EuaJgDnQmzKuV4%$jl)1nv~AD7u^SzSqj_#=MtXFB`Bo{+Q$Rp)lL|r*qqh zaEI9pxvy#y{wIH$J;P>As?Es_SB3W&Ew}l@`b$2*o1Metmwu`uBLjmS3j;%dHzSh> g10sNt)e_1n?sGR z7zYG-ob^8EfAWm?_E0X~!pmC&f;99z&v<*DIeFfDYv`%d;hVN^=JeD#_wA&PULZ&F zOB1G7EgjbC)0QlIE*`2?!BF~?VQb4XRp%C?)j`2iME(dB8?t 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { - System.out.println("Auto-flair plugin cleanup for reloading..."); //2015.08.09. - MaybeOfflinePlayer.AllPlayers.clear(); //2015.08.09. - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1/b070e46d45a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/1/b070e46d45a600151c15ab42d7919fee deleted file mode 100644 index 2c44dad..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1/b070e46d45a600151c15ab42d7919fee +++ /dev/null @@ -1,116 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) { - FlairColor = color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p=Bukkit.getPlayer(UUID); - p.setPlayerListName(String.Format("%s%s", )); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/10/20fd03d549a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/10/20fd03d549a600151c15ab42d7919fee deleted file mode 100644 index 7d75246..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/10/20fd03d549a600151c15ab42d7919fee +++ /dev/null @@ -1,355 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.IOUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.htmlcleaner.HtmlCleaner; -import org.htmlcleaner.TagNode; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.*; -import java.lang.String; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.URLConnection; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.TimeZone; - -public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. - // A user, which flair isn't obtainable: - // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - public static PluginMain Instance; - public static ConsoleCommandSender Console; // 2015.08.12. - - // Fired when plugin is first enabled - @Override - public void onEnable() { - try { - System.out.println("Extracting necessary libraries..."); - final File[] libs = new File[] { new File(getDataFolder(), - "htmlcleaner-2.16.jar") }; - for (final File lib : libs) { - if (!lib.exists()) { - JarUtils.extractFromJar(lib.getName(), - lib.getAbsolutePath()); - } - } - for (final File lib : libs) { - if (!lib.exists()) { - getLogger().warning( - "Failed to load plugin! Could not find lib: " - + lib.getName()); - Bukkit.getServer().getPluginManager().disablePlugin(this); - return; - } - addClassPath(JarUtils.getJarUrl(lib)); - } - } catch (final Exception e) { - e.printStackTrace(); - } - - getServer().getPluginManager().registerEvents(new PlayerListener(), - this); - Commands comm = new Commands(); - this.getCommand("u").setExecutor(comm); - this.getCommand("u").setUsage( - this.getCommand("u").getUsage().replace('&', '§')); - this.getCommand("nrp").setExecutor(comm); - this.getCommand("nrp").setUsage( - this.getCommand("nrp").getUsage().replace('&', '§')); - this.getCommand("ooc").setExecutor(comm); - this.getCommand("ooc").setUsage( - this.getCommand("ooc").getUsage().replace('&', '§')); - Instance = this; // 2015.08.08. - Console = this.getServer().getConsoleSender(); // 2015.08.12. - LoadFiles(false); // 2015.08.09. - Runnable r = new Runnable() { - public void run() { - ThreadMethod(); - } - }; - Thread t = new Thread(r); - t.start(); - r = new Runnable() { - public void run() { - AnnouncerThread.Run(); - } - }; - t = new Thread(r); - t.start(); - } - - public Boolean stop = false; - - // Fired when plugin is disabled - @Override - public void onDisable() { - SaveFiles(); // 2015.08.09. - stop = true; - } - - private void ThreadMethod() { - while (!stop) { - try { - String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json = new JSONArray(body).getJSONObject(1) - .getJSONObject("data").getJSONArray("children"); - for (Object obj : json) { - JSONObject item = (JSONObject) obj; - String author = item.getJSONObject("data").getString( - "author"); - String ign = item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - if (start == -1 + "IGN:".length()) // +length: 2015.08.10. - continue; // 2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end = ign.indexOf('\n', start); // 2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); - if (mp == null) - continue; - if (!mp.UserNames.contains(author)) - mp.UserNames.add(author); - if (mp.FlairState.equals(FlairStates.NoComment)) { - mp.FlairState = FlairStates.Commented; - ConfirmUserMessage(mp); - } - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } - try { - Thread.sleep(10000); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } catch (Exception e) { - // System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - } - - public void DownloadFlair(MaybeOfflinePlayer mp) - throws MalformedURLException, IOException { - String[] flairdata = DownloadString( - "http://karmadecay.com/thebutton-data.php?users=" + mp.UserName) - .replace("\"", "").split(":"); - String flair; - if (flairdata.length > 1) - flair = flairdata[1]; - else - flair = ""; - String flairclass; - if (flairdata.length > 2) - flairclass = flairdata[2]; - else - flairclass = "unknown"; - SetFlair(mp, flair, flairclass, mp.UserName); - } - - public static Exception LastException; // 2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, - IOException { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - private void SetFlair(MaybeOfflinePlayer p, String text, String flairclass, - String username) { - p.UserName = username; - p.FlairState = FlairStates.Recognised; - switch (flairclass) { - case "press-1": - p.SetFlairColor(0xc); - break; - case "press-2": - p.SetFlairColor(0x6); - break; - case "press-3": - p.SetFlairColor(0xe); - break; - case "press-4": - p.SetFlairColor(0xa); - break; - case "press-5": - p.SetFlairColor(0x9); - break; - case "press-6": - p.SetFlairColor(0x5); - break; - case "no-press": - p.SetFlairColor(0x7); - break; - case "cheater": - p.SetFlairColor(0x5); - break; - case "cant-press": - p.SetFlairColor(0xf); - break; - case "unknown": - if (text.equals("-1")) // If true, only non-presser/can't press; if - // false, any flair - { - try { - if (CheckForJoinDate(p)) { - p.SetFlairColor(0x7); - p.SetFlairTime("--"); - } else { - p.FlairColor = 0xf; - p.FlairTime = "--"; - } - } catch (Exception e) { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - e.printStackTrace(); - } - } else { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - } - return; - default: - return; - } - if (text.equals("-1")) - text = "--"; - p.FlairTime = text; - } - - public static boolean CheckForJoinDate(MaybeOfflinePlayer mp) - throws Exception { - URL url = new URL("https://www.reddit.com/u/" + mp.UserName); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - HtmlCleaner cleaner = new HtmlCleaner(); - TagNode node = cleaner.clean(in); - - node = node.getElementsByAttValue("class", "age", true, true)[0]; - node = node.getElementsByName("time", false)[0]; - String joindate = node.getAttributeByName("datetime"); - SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd"); - joindate = joindate.split("T")[0]; - Date date = parserSDF.parse(joindate); - return date.before(new Calendar.Builder() - .setTimeZone(TimeZone.getTimeZone("UTC")).setDate(2015, 4, 1) - .build().getTime()); - } - - public static void ConfirmUserMessage(MaybeOfflinePlayer mp) { - Player p = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented) && p != null) - if (mp.UserNames.size() > 1) - p.sendMessage("§9Multiple Reddit users commented your name. You can select with /u accept.§r §6Type /u accept or /u ignore§r"); - else - p.sendMessage("§9A Reddit user commented your name. Is that you?§r §6Type /u accept or /u ignore§r"); - } - - public static Collection GetPlayers() { - return Instance.getServer().getOnlinePlayers(); - } - - public static ArrayList AnnounceMessages = new ArrayList<>(); - public static int AnnounceTime = 15 * 60 * 1000; - - public static void LoadFiles(boolean reload) { - if (reload) { - System.out - .println("The Button Minecraft plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - AnnounceMessages.clear(); - } - System.out.println("Loading files for The Button Minecraft plugin..."); - try { - File file = new File("announcemessages.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsaccepted.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsignored.txt"); - if (file.exists()) - file.delete(); - file = new File("thebuttonmc.yml"); - if (file.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - yc.load(file); - MaybeOfflinePlayer.Load(yc); - PlayerListener.NotificationSound = yc - .getString("notificationsound"); - PlayerListener.NotificationPitch = yc - .getDouble("notificationpitch"); - AnnounceTime = yc.getInt("announcetime"); - AnnounceMessages.addAll(yc.getStringList("announcements")); - } - System.out.println("The Button Minecraft plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } catch (InvalidConfigurationException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - public static void SaveFiles() { - System.out.println("Saving files for The Button Minecraft plugin..."); - try { - File file = new File("thebuttonmc.yml"); - YamlConfiguration yc = new YamlConfiguration(); - MaybeOfflinePlayer.Save(yc); - yc.set("notificationsound", PlayerListener.NotificationSound); - yc.set("notificationpitch", PlayerListener.NotificationPitch); - yc.set("announcetime", AnnounceTime); - yc.set("announcements", AnnounceMessages); - yc.save(file); - System.out.println("The Button Minecraft plugin saved files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - private void addClassPath(final URL url) throws IOException { - final URLClassLoader sysloader = (URLClassLoader) ClassLoader - .getSystemClassLoader(); - final Class sysclass = URLClassLoader.class; - try { - final Method method = sysclass.getDeclaredMethod("addURL", - new Class[] { URL.class }); - method.setAccessible(true); - method.invoke(sysloader, new Object[] { url }); - } catch (final Throwable t) { - t.printStackTrace(); - throw new IOException("Error adding " + url - + " to system classloader"); - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/10/302feacd41a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/10/302feacd41a600151c15ab42d7919fee deleted file mode 100644 index 5810a0c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/10/302feacd41a600151c15ab42d7919fee +++ /dev/null @@ -1,603 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - Player p = null; - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/12/a077bfc949a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/12/a077bfc949a600151c15ab42d7919fee deleted file mode 100644 index d3a7015..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/12/a077bfc949a600151c15ab42d7919fee +++ /dev/null @@ -1,125 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(int color) { - FlairColor = (short) color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(int color, String time) { - FlairColor = (short)color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p = Bukkit.getPlayer(UUID); - p.setPlayerListName(String.format("%s%s", p.getPlayerListName(), - GetFormattedFlair())); - } - - public short GetFlairColor() { - return FlairColor; - } - - public String GetFlairTime() { - return FlairTime; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/12/b09714c2cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/12/b09714c2cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 206b53a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/12/b09714c2cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,362 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - player.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/13/b0a0fbb849a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/13/b0a0fbb849a600151c15ab42d7919fee deleted file mode 100644 index 88e0af8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/13/b0a0fbb849a600151c15ab42d7919fee +++ /dev/null @@ -1,355 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.IOUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.htmlcleaner.HtmlCleaner; -import org.htmlcleaner.TagNode; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.*; -import java.lang.String; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.URLConnection; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.TimeZone; - -public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. - // A user, which flair isn't obtainable: - // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - public static PluginMain Instance; - public static ConsoleCommandSender Console; // 2015.08.12. - - // Fired when plugin is first enabled - @Override - public void onEnable() { - try { - System.out.println("Extracting necessary libraries..."); - final File[] libs = new File[] { new File(getDataFolder(), - "htmlcleaner-2.16.jar") }; - for (final File lib : libs) { - if (!lib.exists()) { - JarUtils.extractFromJar(lib.getName(), - lib.getAbsolutePath()); - } - } - for (final File lib : libs) { - if (!lib.exists()) { - getLogger().warning( - "Failed to load plugin! Could not find lib: " - + lib.getName()); - Bukkit.getServer().getPluginManager().disablePlugin(this); - return; - } - addClassPath(JarUtils.getJarUrl(lib)); - } - } catch (final Exception e) { - e.printStackTrace(); - } - - getServer().getPluginManager().registerEvents(new PlayerListener(), - this); - Commands comm = new Commands(); - this.getCommand("u").setExecutor(comm); - this.getCommand("u").setUsage( - this.getCommand("u").getUsage().replace('&', '§')); - this.getCommand("nrp").setExecutor(comm); - this.getCommand("nrp").setUsage( - this.getCommand("nrp").getUsage().replace('&', '§')); - this.getCommand("ooc").setExecutor(comm); - this.getCommand("ooc").setUsage( - this.getCommand("ooc").getUsage().replace('&', '§')); - Instance = this; // 2015.08.08. - Console = this.getServer().getConsoleSender(); // 2015.08.12. - LoadFiles(false); // 2015.08.09. - Runnable r = new Runnable() { - public void run() { - ThreadMethod(); - } - }; - Thread t = new Thread(r); - t.start(); - r = new Runnable() { - public void run() { - AnnouncerThread.Run(); - } - }; - t = new Thread(r); - t.start(); - } - - public Boolean stop = false; - - // Fired when plugin is disabled - @Override - public void onDisable() { - SaveFiles(); // 2015.08.09. - stop = true; - } - - private void ThreadMethod() { - while (!stop) { - try { - String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json = new JSONArray(body).getJSONObject(1) - .getJSONObject("data").getJSONArray("children"); - for (Object obj : json) { - JSONObject item = (JSONObject) obj; - String author = item.getJSONObject("data").getString( - "author"); - String ign = item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - if (start == -1 + "IGN:".length()) // +length: 2015.08.10. - continue; // 2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end = ign.indexOf('\n', start); // 2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); - if (mp == null) - continue; - if (!mp.UserNames.contains(author)) - mp.UserNames.add(author); - if (mp.FlairState.equals(FlairStates.NoComment)) { - mp.FlairState = FlairStates.Commented; - ConfirmUserMessage(mp); - } - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } - try { - Thread.sleep(10000); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } catch (Exception e) { - // System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - } - - public void DownloadFlair(MaybeOfflinePlayer mp) - throws MalformedURLException, IOException { - String[] flairdata = DownloadString( - "http://karmadecay.com/thebutton-data.php?users=" + mp.UserName) - .replace("\"", "").split(":"); - String flair; - if (flairdata.length > 1) - flair = flairdata[1]; - else - flair = ""; - String flairclass; - if (flairdata.length > 2) - flairclass = flairdata[2]; - else - flairclass = "unknown"; - SetFlair(mp, flair, flairclass, mp.UserName); - } - - public static Exception LastException; // 2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, - IOException { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - private void SetFlair(MaybeOfflinePlayer p, String text, String flairclass, - String username) { - p.UserName = username; - p.FlairState = FlairStates.Recognised; - switch (flairclass) { - case "press-1": - p.SetFlairColor(0xc); - break; - case "press-2": - p.SetFlairColor(0x6); - break; - case "press-3": - p.SetFlairColor(0xe); - break; - case "press-4": - p.SetFlairColor(0xa); - break; - case "press-5": - p.SetFlairColor(0x9); - break; - case "press-6": - p.SetFlairColor(0x5); - break; - case "no-press": - p.SetFlairColor(0x7); - break; - case "cheater": - p.SetFlairColor(0x5); - break; - case "cant-press": - p.SetFlairColor(0xf); - break; - case "unknown": - if (text.equals("-1")) // If true, only non-presser/can't press; if - // false, any flair - { - try { - if (CheckForJoinDate(p)) { - p.FlairColor = 0x7; - p.FlairTime = "--"; - } else { - p.FlairColor = 0xf; - p.FlairTime = "--"; - } - } catch (Exception e) { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - e.printStackTrace(); - } - } else { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - } - return; - default: - return; - } - if (text.equals("-1")) - text = "--"; - p.FlairTime = text; - } - - public static boolean CheckForJoinDate(MaybeOfflinePlayer mp) - throws Exception { - URL url = new URL("https://www.reddit.com/u/" + mp.UserName); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - HtmlCleaner cleaner = new HtmlCleaner(); - TagNode node = cleaner.clean(in); - - node = node.getElementsByAttValue("class", "age", true, true)[0]; - node = node.getElementsByName("time", false)[0]; - String joindate = node.getAttributeByName("datetime"); - SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd"); - joindate = joindate.split("T")[0]; - Date date = parserSDF.parse(joindate); - return date.before(new Calendar.Builder() - .setTimeZone(TimeZone.getTimeZone("UTC")).setDate(2015, 4, 1) - .build().getTime()); - } - - public static void ConfirmUserMessage(MaybeOfflinePlayer mp) { - Player p = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented) && p != null) - if (mp.UserNames.size() > 1) - p.sendMessage("§9Multiple Reddit users commented your name. You can select with /u accept.§r §6Type /u accept or /u ignore§r"); - else - p.sendMessage("§9A Reddit user commented your name. Is that you?§r §6Type /u accept or /u ignore§r"); - } - - public static Collection GetPlayers() { - return Instance.getServer().getOnlinePlayers(); - } - - public static ArrayList AnnounceMessages = new ArrayList<>(); - public static int AnnounceTime = 15 * 60 * 1000; - - public static void LoadFiles(boolean reload) { - if (reload) { - System.out - .println("The Button Minecraft plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - AnnounceMessages.clear(); - } - System.out.println("Loading files for The Button Minecraft plugin..."); - try { - File file = new File("announcemessages.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsaccepted.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsignored.txt"); - if (file.exists()) - file.delete(); - file = new File("thebuttonmc.yml"); - if (file.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - yc.load(file); - MaybeOfflinePlayer.Load(yc); - PlayerListener.NotificationSound = yc - .getString("notificationsound"); - PlayerListener.NotificationPitch = yc - .getDouble("notificationpitch"); - AnnounceTime = yc.getInt("announcetime"); - AnnounceMessages.addAll(yc.getStringList("announcements")); - } - System.out.println("The Button Minecraft plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } catch (InvalidConfigurationException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - public static void SaveFiles() { - System.out.println("Saving files for The Button Minecraft plugin..."); - try { - File file = new File("thebuttonmc.yml"); - YamlConfiguration yc = new YamlConfiguration(); - MaybeOfflinePlayer.Save(yc); - yc.set("notificationsound", PlayerListener.NotificationSound); - yc.set("notificationpitch", PlayerListener.NotificationPitch); - yc.set("announcetime", AnnounceTime); - yc.set("announcements", AnnounceMessages); - yc.save(file); - System.out.println("The Button Minecraft plugin saved files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - private void addClassPath(final URL url) throws IOException { - final URLClassLoader sysloader = (URLClassLoader) ClassLoader - .getSystemClassLoader(); - final Class sysclass = URLClassLoader.class; - try { - final Method method = sysclass.getDeclaredMethod("addURL", - new Class[] { URL.class }); - method.setAccessible(true); - method.invoke(sysloader, new Object[] { url }); - } catch (final Throwable t) { - t.printStackTrace(); - throw new IOException("Error adding " + url - + " to system classloader"); - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/14/20b7f4c2d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/14/20b7f4c2d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 5cf5c6e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/14/20b7f4c2d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true; - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/15/a0689143d43e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/15/a0689143d43e001518fa86d7ae2a1cf8 deleted file mode 100644 index b72f226..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/15/a0689143d43e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,221 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done."); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - DoReload(player); //2015.08.09. - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/16/303c161945a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/16/303c161945a600151c15ab42d7919fee deleted file mode 100644 index ed76b86..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/16/303c161945a600151c15ab42d7919fee +++ /dev/null @@ -1,110 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) { - FlairColor = color; - } - - public void SetFlairTime(String time) { - FlairTime = time; - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - event.getPlayer().setPlayerListName(""); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/17/70f2199141a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/17/70f2199141a600151c15ab42d7919fee deleted file mode 100644 index 01ff1c5..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/17/70f2199141a600151c15ab42d7919fee +++ /dev/null @@ -1,597 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - Player p=null; - if(Lastlol!=null || Bukkit.getPlayer(Lastlol.UUID)) - Lastlol.UUID - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/19/c0e42302ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/19/c0e42302ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 84912b7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/19/c0e42302ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,354 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - String finalflair; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": - finalflair=""; //2015.08.09. - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c0bedf60e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c0bedf60e640001514c09dece48b36c7 deleted file mode 100644 index bc3d453..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c0bedf60e640001514c09dece48b36c7 +++ /dev/null @@ -1,73 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.playSound(p.getLocation(), Sound.ORB_PICKUP, arg2, arg3) - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1c/50b35f3bd23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/1c/50b35f3bd23e001518fa86d7ae2a1cf8 deleted file mode 100644 index f15dd12..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1c/50b35f3bd23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,376 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1c/a0ecf93ad23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/1c/a0ecf93ad23e001518fa86d7ae2a1cf8 deleted file mode 100644 index f15dd12..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1c/a0ecf93ad23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,376 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1d/709a3bde2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/1d/709a3bde2d53001516cdaaef55e27ba4 deleted file mode 100644 index dcd717b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1d/709a3bde2d53001516cdaaef55e27ba4 +++ /dev/null @@ -1,15 +0,0 @@ -name: TheButtonMCPlugin -main: tk.sznp.thebuttonautoflair.PluginMain -version: 2.0 -commands: - u: - description: Auto-flair system. Accept or ignore flair. - usage: "&cUsage: /u accept|ignore|opme&r" - nrp: - description: Send message in Out-of-Character - usage: "&cUsage: /nrp &r" - ooc: - description: Send message in Out-of-Character - usage: "&cUsage: /ooc &r" -author: NorbiPeti -depend: [Essentials, Towny] \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/20ce3447d43e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/20ce3447d43e001518fa86d7ae2a1cf8 deleted file mode 100644 index 869953e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/20ce3447d43e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,224 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done."); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - if(ReloadPlayer.equals(player)) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/606a09eede40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/606a09eede40001514c09dece48b36c7 deleted file mode 100644 index d1dda6d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/606a09eede40001514c09dece48b36c7 +++ /dev/null @@ -1,297 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§6The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/a0477e13d43e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/a0477e13d43e001518fa86d7ae2a1cf8 deleted file mode 100644 index f26d723..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/a0477e13d43e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,220 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done."); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - DoReload(player); //2015.08.09. - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/b057e861ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/b057e861ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 4343f31..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/b057e861ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,31 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.HashMap; - -public class MaybeOfflinePlayer -{ //2015.08.08. - public String PlayerName; - public String UserName; - public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not - public boolean AcceptedFlair; - public boolean IgnoredFlair; - public FlairClassType FlairType; //2015.08.09. - public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. - public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) - { - if(!AllPlayers.containsKey(playername)) - { - MaybeOfflinePlayer player=new MaybeOfflinePlayer(); - player.PlayerName=playername; - AllPlayers.put(playername, player); - return player; - } - return AllPlayers.get(playername); - } - /*public enum FlairClassType - { //2015.08.09. - NonPresser, - CantPress, - Undecided - }*/ -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/d0e4168be540001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/d0e4168be540001514c09dece48b36c7 deleted file mode 100644 index 8742a9c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/d0e4168be540001514c09dece48b36c7 +++ /dev/null @@ -1,71 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1f/203f7772d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/1f/203f7772d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index efbed4c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1f/203f7772d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,380 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static void SaveFiles() //<-- 2015.08.09. - { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2/008fa000f34500151ebce83b3129f79d b/.metadata/.plugins/org.eclipse.core.resources/.history/2/008fa000f34500151ebce83b3129f79d deleted file mode 100644 index 9f10d95..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/2/008fa000f34500151ebce83b3129f79d +++ /dev/null @@ -1,78 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - public static String NotificationSound; //2015.08.14. - public static float NotificationPitch; //2015.08.14. - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - String color=""; //2015.08.17. - if(message.contains(p.getName())) - { - if(NotificationSound==null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); //2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, NotificationPitch); //2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.17. - color=mp.Flair.substring(0, 2); - } - message = message.replaceAll(p.getName(), color+p.getName()+"§r"); - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - Object handle = Reflection.getHandle(player); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2/20385cfb44a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/2/20385cfb44a600151c15ab42d7919fee deleted file mode 100644 index 6cc330d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/2/20385cfb44a600151c15ab42d7919fee +++ /dev/null @@ -1,106 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) - { - } - - public void SetFlairTime(String time) - { - - } - - public void SetFlair(short color, String time) - - //Flairs from Command Block The Button - Teams - //PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - event.getPlayer().setPlayerListName(""); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2/a06adb06d43e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/2/a06adb06d43e001518fa86d7ae2a1cf8 deleted file mode 100644 index 2ccf0cc..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/2/a06adb06d43e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,219 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - DoReload(player); //2015.08.09. - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/20/2004d51d42a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/20/2004d51d42a600151c15ab42d7919fee deleted file mode 100644 index 75a751b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/20/2004d51d42a600151c15ab42d7919fee +++ /dev/null @@ -1,371 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); //TODO: Quiz queue - //TODO: Flairs from Command Block The Button - Teams - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - /* - * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) - * .getChannelsHandler().getActiveChannel(e.getPlayer(), - * channelTypes.GLOBAL); - */ - /* - * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( - * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if - * (modes.size() == 0 || modes.contains("g")) { - */ - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/20/802a22d2de40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/20/802a22d2de40001514c09dece48b36c7 deleted file mode 100644 index 2df291c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/20/802a22d2de40001514c09dece48b36c7 +++ /dev/null @@ -1,71 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message.replaceAll(p.getName(), ) - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/20/b08b3094cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/20/b08b3094cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 50ac8ec..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/20/b08b3094cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,364 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - player.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/21/20cc239649a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/21/20cc239649a600151c15ab42d7919fee deleted file mode 100644 index 9b3d382..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/21/20cc239649a600151c15ab42d7919fee +++ /dev/null @@ -1,355 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.IOUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.htmlcleaner.HtmlCleaner; -import org.htmlcleaner.TagNode; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.*; -import java.lang.String; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.URLConnection; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.TimeZone; - -public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. - // A user, which flair isn't obtainable: - // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - public static PluginMain Instance; - public static ConsoleCommandSender Console; // 2015.08.12. - - // Fired when plugin is first enabled - @Override - public void onEnable() { - try { - System.out.println("Extracting necessary libraries..."); - final File[] libs = new File[] { new File(getDataFolder(), - "htmlcleaner-2.16.jar") }; - for (final File lib : libs) { - if (!lib.exists()) { - JarUtils.extractFromJar(lib.getName(), - lib.getAbsolutePath()); - } - } - for (final File lib : libs) { - if (!lib.exists()) { - getLogger().warning( - "Failed to load plugin! Could not find lib: " - + lib.getName()); - Bukkit.getServer().getPluginManager().disablePlugin(this); - return; - } - addClassPath(JarUtils.getJarUrl(lib)); - } - } catch (final Exception e) { - e.printStackTrace(); - } - - getServer().getPluginManager().registerEvents(new PlayerListener(), - this); - Commands comm = new Commands(); - this.getCommand("u").setExecutor(comm); - this.getCommand("u").setUsage( - this.getCommand("u").getUsage().replace('&', '§')); - this.getCommand("nrp").setExecutor(comm); - this.getCommand("nrp").setUsage( - this.getCommand("nrp").getUsage().replace('&', '§')); - this.getCommand("ooc").setExecutor(comm); - this.getCommand("ooc").setUsage( - this.getCommand("ooc").getUsage().replace('&', '§')); - Instance = this; // 2015.08.08. - Console = this.getServer().getConsoleSender(); // 2015.08.12. - LoadFiles(false); // 2015.08.09. - Runnable r = new Runnable() { - public void run() { - ThreadMethod(); - } - }; - Thread t = new Thread(r); - t.start(); - r = new Runnable() { - public void run() { - AnnouncerThread.Run(); - } - }; - t = new Thread(r); - t.start(); - } - - public Boolean stop = false; - - // Fired when plugin is disabled - @Override - public void onDisable() { - SaveFiles(); // 2015.08.09. - stop = true; - } - - private void ThreadMethod() { - while (!stop) { - try { - String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json = new JSONArray(body).getJSONObject(1) - .getJSONObject("data").getJSONArray("children"); - for (Object obj : json) { - JSONObject item = (JSONObject) obj; - String author = item.getJSONObject("data").getString( - "author"); - String ign = item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - if (start == -1 + "IGN:".length()) // +length: 2015.08.10. - continue; // 2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end = ign.indexOf('\n', start); // 2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); - if (mp == null) - continue; - if (!mp.UserNames.contains(author)) - mp.UserNames.add(author); - if (mp.FlairState.equals(FlairStates.NoComment)) { - mp.FlairState = FlairStates.Commented; - ConfirmUserMessage(mp); - } - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } - try { - Thread.sleep(10000); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } catch (Exception e) { - // System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - } - - public void DownloadFlair(MaybeOfflinePlayer mp) - throws MalformedURLException, IOException { - String[] flairdata = DownloadString( - "http://karmadecay.com/thebutton-data.php?users=" + mp.UserName) - .replace("\"", "").split(":"); - String flair; - if (flairdata.length > 1) - flair = flairdata[1]; - else - flair = ""; - String flairclass; - if (flairdata.length > 2) - flairclass = flairdata[2]; - else - flairclass = "unknown"; - SetFlair(mp, flair, flairclass, mp.UserName); - } - - public static Exception LastException; // 2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, - IOException { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - private void SetFlair(MaybeOfflinePlayer p, String text, String flairclass, - String username) { - p.UserName = username; - p.FlairState = FlairStates.Recognised; - switch (flairclass) { - case "press-1": - p.SetFlairColor(0xc); - break; - case "press-2": - p.SetFlairColor(0x6); - break; - case "press-3": - p.SetFlairColor(0xe); - break; - case "press-4": - p.SetFlairColor(0xa); - break; - case "press-5": - p.SetFlairColor(0x9); - break; - case "press-6": - p.SetFlairColor(0x5); - break; - case "no-press": - p.SetFlairColor(0x7); - break; - case "cheater": - p.SetFlairColor(0x5); - break; - case "cant-press": - p.FlairColor = 0xf; - break; - case "unknown": - if (text.equals("-1")) // If true, only non-presser/can't press; if - // false, any flair - { - try { - if (CheckForJoinDate(p)) { - p.FlairColor = 0x7; - p.FlairTime = "--"; - } else { - p.FlairColor = 0xf; - p.FlairTime = "--"; - } - } catch (Exception e) { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - e.printStackTrace(); - } - } else { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - } - return; - default: - return; - } - if (text.equals("-1")) - text = "--"; - p.FlairTime = text; - } - - public static boolean CheckForJoinDate(MaybeOfflinePlayer mp) - throws Exception { - URL url = new URL("https://www.reddit.com/u/" + mp.UserName); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - HtmlCleaner cleaner = new HtmlCleaner(); - TagNode node = cleaner.clean(in); - - node = node.getElementsByAttValue("class", "age", true, true)[0]; - node = node.getElementsByName("time", false)[0]; - String joindate = node.getAttributeByName("datetime"); - SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd"); - joindate = joindate.split("T")[0]; - Date date = parserSDF.parse(joindate); - return date.before(new Calendar.Builder() - .setTimeZone(TimeZone.getTimeZone("UTC")).setDate(2015, 4, 1) - .build().getTime()); - } - - public static void ConfirmUserMessage(MaybeOfflinePlayer mp) { - Player p = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented) && p != null) - if (mp.UserNames.size() > 1) - p.sendMessage("§9Multiple Reddit users commented your name. You can select with /u accept.§r §6Type /u accept or /u ignore§r"); - else - p.sendMessage("§9A Reddit user commented your name. Is that you?§r §6Type /u accept or /u ignore§r"); - } - - public static Collection GetPlayers() { - return Instance.getServer().getOnlinePlayers(); - } - - public static ArrayList AnnounceMessages = new ArrayList<>(); - public static int AnnounceTime = 15 * 60 * 1000; - - public static void LoadFiles(boolean reload) { - if (reload) { - System.out - .println("The Button Minecraft plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - AnnounceMessages.clear(); - } - System.out.println("Loading files for The Button Minecraft plugin..."); - try { - File file = new File("announcemessages.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsaccepted.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsignored.txt"); - if (file.exists()) - file.delete(); - file = new File("thebuttonmc.yml"); - if (file.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - yc.load(file); - MaybeOfflinePlayer.Load(yc); - PlayerListener.NotificationSound = yc - .getString("notificationsound"); - PlayerListener.NotificationPitch = yc - .getDouble("notificationpitch"); - AnnounceTime = yc.getInt("announcetime"); - AnnounceMessages.addAll(yc.getStringList("announcements")); - } - System.out.println("The Button Minecraft plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } catch (InvalidConfigurationException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - public static void SaveFiles() { - System.out.println("Saving files for The Button Minecraft plugin..."); - try { - File file = new File("thebuttonmc.yml"); - YamlConfiguration yc = new YamlConfiguration(); - MaybeOfflinePlayer.Save(yc); - yc.set("notificationsound", PlayerListener.NotificationSound); - yc.set("notificationpitch", PlayerListener.NotificationPitch); - yc.set("announcetime", AnnounceTime); - yc.set("announcements", AnnounceMessages); - yc.save(file); - System.out.println("The Button Minecraft plugin saved files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - private void addClassPath(final URL url) throws IOException { - final URLClassLoader sysloader = (URLClassLoader) ClassLoader - .getSystemClassLoader(); - final Class sysclass = URLClassLoader.class; - try { - final Method method = sysclass.getDeclaredMethod("addURL", - new Class[] { URL.class }); - method.setAccessible(true); - method.invoke(sysloader, new Object[] { url }); - } catch (final Throwable t) { - t.printStackTrace(); - throw new IOException("Error adding " + url - + " to system classloader"); - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/21/c0a02994e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/21/c0a02994e640001514c09dece48b36c7 deleted file mode 100644 index 8bd4265..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/21/c0a02994e640001514c09dece48b36c7 +++ /dev/null @@ -1,74 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - if(message.contains(p.getName())) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f); //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/22/408c617d44a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/22/408c617d44a600151c15ab42d7919fee deleted file mode 100644 index 18f37b7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/22/408c617d44a600151c15ab42d7919fee +++ /dev/null @@ -1,368 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); // TODO: Quiz queue - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - // TODO: Flairs from Command Block The Button - Teams - //PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - event.getPlayer().setPlayerListName(""); - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer() - .getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/22/40feff6ce640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/22/40feff6ce640001514c09dece48b36c7 deleted file mode 100644 index 4e9ef04..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/22/40feff6ce640001514c09dece48b36c7 +++ /dev/null @@ -1,73 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0, 1.0); //2015.08.12. - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/22/a091cfc4d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/22/a091cfc4d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 5d7321f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/22/a091cfc4d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/23/a0c7c72cd33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/23/a0c7c72cd33e001518fa86d7ae2a1cf8 deleted file mode 100644 index f17161d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/23/a0c7c72cd33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,216 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; - //SendMessage(player, msg); //2015.08.09. - - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/24/c0d763f341a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/24/c0d763f341a600151c15ab42d7919fee deleted file mode 100644 index 75a751b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/24/c0d763f341a600151c15ab42d7919fee +++ /dev/null @@ -1,371 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); //TODO: Quiz queue - //TODO: Flairs from Command Block The Button - Teams - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - /* - * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) - * .getChannelsHandler().getActiveChannel(e.getPlayer(), - * channelTypes.GLOBAL); - */ - /* - * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( - * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if - * (modes.size() == 0 || modes.contains("g")) { - */ - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/25/3067ea8bd13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/25/3067ea8bd13e001518fa86d7ae2a1cf8 deleted file mode 100644 index c1c6d6a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/25/3067ea8bd13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,326 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - Load(false); - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) - { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/25/c05ce792e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/25/c05ce792e640001514c09dece48b36c7 deleted file mode 100644 index 12d9c01..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/25/c05ce792e640001514c09dece48b36c7 +++ /dev/null @@ -1,73 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f); //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/26/20fee89fce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/26/20fee89fce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index ab06769..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/26/20fee89fce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,360 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/26/a0111a40d33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/26/a0111a40d33e001518fa86d7ae2a1cf8 deleted file mode 100644 index 61ec61c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/26/a0111a40d33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/27/9011edbed23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/27/9011edbed23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 717cff8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/27/9011edbed23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/27/f08a8910cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/27/f08a8910cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 999a5ae..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/27/f08a8910cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,362 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) - { - - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/28/309e6352d33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/28/309e6352d33e001518fa86d7ae2a1cf8 deleted file mode 100644 index d073151..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/28/309e6352d33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,216 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/29/40e1da43e340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/29/40e1da43e340001514c09dece48b36c7 deleted file mode 100644 index b844d5e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/29/40e1da43e340001514c09dece48b36c7 +++ /dev/null @@ -1,295 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/29/50338b22e340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/29/50338b22e340001514c09dece48b36c7 deleted file mode 100644 index 4f33dd3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/29/50338b22e340001514c09dece48b36c7 +++ /dev/null @@ -1,298 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2a/20868515d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/2a/20868515d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index ccaedeb..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/2a/20868515d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,363 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - player.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2b/702271ffde40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/2b/702271ffde40001514c09dece48b36c7 deleted file mode 100644 index e334416..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/2b/702271ffde40001514c09dece48b36c7 +++ /dev/null @@ -1,297 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2c/80f4cccb41a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/2c/80f4cccb41a600151c15ab42d7919fee deleted file mode 100644 index 8b1058f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/2c/80f4cccb41a600151c15ab42d7919fee +++ /dev/null @@ -1,599 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - Player p=null; - if(Lastlol!=null || (p=Bukkit.getPlayer(Lastlol.UUID))!=null) - { - p.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 10, 5, false, false)); - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2e/90fc2ebfd23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/2e/90fc2ebfd23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 717cff8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/2e/90fc2ebfd23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2f/30aed98449a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/2f/30aed98449a600151c15ab42d7919fee deleted file mode 100644 index ceb7a8c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/2f/30aed98449a600151c15ab42d7919fee +++ /dev/null @@ -1,355 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.IOUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.htmlcleaner.HtmlCleaner; -import org.htmlcleaner.TagNode; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.*; -import java.lang.String; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.URLConnection; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.TimeZone; - -public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. - // A user, which flair isn't obtainable: - // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - public static PluginMain Instance; - public static ConsoleCommandSender Console; // 2015.08.12. - - // Fired when plugin is first enabled - @Override - public void onEnable() { - try { - System.out.println("Extracting necessary libraries..."); - final File[] libs = new File[] { new File(getDataFolder(), - "htmlcleaner-2.16.jar") }; - for (final File lib : libs) { - if (!lib.exists()) { - JarUtils.extractFromJar(lib.getName(), - lib.getAbsolutePath()); - } - } - for (final File lib : libs) { - if (!lib.exists()) { - getLogger().warning( - "Failed to load plugin! Could not find lib: " - + lib.getName()); - Bukkit.getServer().getPluginManager().disablePlugin(this); - return; - } - addClassPath(JarUtils.getJarUrl(lib)); - } - } catch (final Exception e) { - e.printStackTrace(); - } - - getServer().getPluginManager().registerEvents(new PlayerListener(), - this); - Commands comm = new Commands(); - this.getCommand("u").setExecutor(comm); - this.getCommand("u").setUsage( - this.getCommand("u").getUsage().replace('&', '§')); - this.getCommand("nrp").setExecutor(comm); - this.getCommand("nrp").setUsage( - this.getCommand("nrp").getUsage().replace('&', '§')); - this.getCommand("ooc").setExecutor(comm); - this.getCommand("ooc").setUsage( - this.getCommand("ooc").getUsage().replace('&', '§')); - Instance = this; // 2015.08.08. - Console = this.getServer().getConsoleSender(); // 2015.08.12. - LoadFiles(false); // 2015.08.09. - Runnable r = new Runnable() { - public void run() { - ThreadMethod(); - } - }; - Thread t = new Thread(r); - t.start(); - r = new Runnable() { - public void run() { - AnnouncerThread.Run(); - } - }; - t = new Thread(r); - t.start(); - } - - public Boolean stop = false; - - // Fired when plugin is disabled - @Override - public void onDisable() { - SaveFiles(); // 2015.08.09. - stop = true; - } - - private void ThreadMethod() { - while (!stop) { - try { - String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json = new JSONArray(body).getJSONObject(1) - .getJSONObject("data").getJSONArray("children"); - for (Object obj : json) { - JSONObject item = (JSONObject) obj; - String author = item.getJSONObject("data").getString( - "author"); - String ign = item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - if (start == -1 + "IGN:".length()) // +length: 2015.08.10. - continue; // 2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end = ign.indexOf('\n', start); // 2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); - if (mp == null) - continue; - if (!mp.UserNames.contains(author)) - mp.UserNames.add(author); - if (mp.FlairState.equals(FlairStates.NoComment)) { - mp.FlairState = FlairStates.Commented; - ConfirmUserMessage(mp); - } - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } - try { - Thread.sleep(10000); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } catch (Exception e) { - // System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - } - - public void DownloadFlair(MaybeOfflinePlayer mp) - throws MalformedURLException, IOException { - String[] flairdata = DownloadString( - "http://karmadecay.com/thebutton-data.php?users=" + mp.UserName) - .replace("\"", "").split(":"); - String flair; - if (flairdata.length > 1) - flair = flairdata[1]; - else - flair = ""; - String flairclass; - if (flairdata.length > 2) - flairclass = flairdata[2]; - else - flairclass = "unknown"; - SetFlair(mp, flair, flairclass, mp.UserName); - } - - public static Exception LastException; // 2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, - IOException { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - private void SetFlair(MaybeOfflinePlayer p, String text, String flairclass, - String username) { - p.UserName = username; - p.FlairState = FlairStates.Recognised; - switch (flairclass) { - case "press-1": - p.FlairColor = 0xc; - break; - case "press-2": - p.FlairColor = 0x6; - break; - case "press-3": - p.FlairColor = 0xe; - break; - case "press-4": - p.FlairColor = 0xa; - break; - case "press-5": - p.FlairColor = 0x9; - break; - case "press-6": - p.FlairColor = 0x5; - break; - case "no-press": - p.FlairColor = 0x7; - break; - case "cheater": - p.FlairColor = 0x5; - break; - case "cant-press": - p.FlairColor = 0xf; - break; - case "unknown": - if (text.equals("-1")) // If true, only non-presser/can't press; if - // false, any flair - { - try { - if (CheckForJoinDate(p)) { - p.FlairColor = 0x7; - p.FlairTime = "--"; - } else { - p.FlairColor = 0xf; - p.FlairTime = "--"; - } - } catch (Exception e) { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - e.printStackTrace(); - } - } else { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - } - return; - default: - return; - } - if (text.equals("-1")) - text = "--"; - p.FlairTime = text; - } - - public static boolean CheckForJoinDate(MaybeOfflinePlayer mp) - throws Exception { - URL url = new URL("https://www.reddit.com/u/" + mp.UserName); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - HtmlCleaner cleaner = new HtmlCleaner(); - TagNode node = cleaner.clean(in); - - node = node.getElementsByAttValue("class", "age", true, true)[0]; - node = node.getElementsByName("time", false)[0]; - String joindate = node.getAttributeByName("datetime"); - SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd"); - joindate = joindate.split("T")[0]; - Date date = parserSDF.parse(joindate); - return date.before(new Calendar.Builder() - .setTimeZone(TimeZone.getTimeZone("UTC")).setDate(2015, 4, 1) - .build().getTime()); - } - - public static void ConfirmUserMessage(MaybeOfflinePlayer mp) { - Player p = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented) && p != null) - if (mp.UserNames.size() > 1) - p.sendMessage("§9Multiple Reddit users commented your name. You can select with /u accept.§r §6Type /u accept or /u ignore§r"); - else - p.sendMessage("§9A Reddit user commented your name. Is that you?§r §6Type /u accept or /u ignore§r"); - } - - public static Collection GetPlayers() { - return Instance.getServer().getOnlinePlayers(); - } - - public static ArrayList AnnounceMessages = new ArrayList<>(); - public static int AnnounceTime = 15 * 60 * 1000; - - public static void LoadFiles(boolean reload) { - if (reload) { - System.out - .println("The Button Minecraft plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - AnnounceMessages.clear(); - } - System.out.println("Loading files for The Button Minecraft plugin..."); - try { - File file = new File("announcemessages.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsaccepted.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsignored.txt"); - if (file.exists()) - file.delete(); - file = new File("thebuttonmc.yml"); - if (file.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - yc.load(file); - MaybeOfflinePlayer.Load(yc); - PlayerListener.NotificationSound = yc - .getString("notificationsound"); - PlayerListener.NotificationPitch = yc - .getDouble("notificationpitch"); - AnnounceTime = yc.getInt("announcetime"); - AnnounceMessages.addAll(yc.getStringList("announcements")); - } - System.out.println("The Button Minecraft plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } catch (InvalidConfigurationException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - public static void SaveFiles() { - System.out.println("Saving files for The Button Minecraft plugin..."); - try { - File file = new File("thebuttonmc.yml"); - YamlConfiguration yc = new YamlConfiguration(); - MaybeOfflinePlayer.Save(yc); - yc.set("notificationsound", PlayerListener.NotificationSound); - yc.set("notificationpitch", PlayerListener.NotificationPitch); - yc.set("announcetime", AnnounceTime); - yc.set("announcements", AnnounceMessages); - yc.save(file); - System.out.println("The Button Minecraft plugin saved files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - private void addClassPath(final URL url) throws IOException { - final URLClassLoader sysloader = (URLClassLoader) ClassLoader - .getSystemClassLoader(); - final Class sysclass = URLClassLoader.class; - try { - final Method method = sysclass.getDeclaredMethod("addURL", - new Class[] { URL.class }); - method.setAccessible(true); - method.invoke(sysloader, new Object[] { url }); - } catch (final Throwable t) { - t.printStackTrace(); - throw new IOException("Error adding " + url - + " to system classloader"); - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3/004e1951d8a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/3/004e1951d8a500151c15ab42d7919fee deleted file mode 100644 index 36790ac..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3/004e1951d8a500151c15ab42d7919fee +++ /dev/null @@ -1,596 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static boolean PluginUpdated = false; // 2015.08.31. - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) - { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/30/20a0c374d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/30/20a0c374d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 641be01..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/30/20a0c374d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,345 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - SaveFiles(); //2015.08.09. - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static void SaveFiles() //<-- 2015.08.09. - { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/30/60f899dc2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/30/60f899dc2d53001516cdaaef55e27ba4 deleted file mode 100644 index dcd717b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/30/60f899dc2d53001516cdaaef55e27ba4 +++ /dev/null @@ -1,15 +0,0 @@ -name: TheButtonMCPlugin -main: tk.sznp.thebuttonautoflair.PluginMain -version: 2.0 -commands: - u: - description: Auto-flair system. Accept or ignore flair. - usage: "&cUsage: /u accept|ignore|opme&r" - nrp: - description: Send message in Out-of-Character - usage: "&cUsage: /nrp &r" - ooc: - description: Send message in Out-of-Character - usage: "&cUsage: /ooc &r" -author: NorbiPeti -depend: [Essentials, Towny] \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/31/20e2516b49a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/31/20e2516b49a600151c15ab42d7919fee deleted file mode 100644 index b9ffc59..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/31/20e2516b49a600151c15ab42d7919fee +++ /dev/null @@ -1,122 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) { - FlairColor = color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p = Bukkit.getPlayer(UUID); - p.setPlayerListName(String.format("%s%s", p.getPlayerListName(), - GetFormattedFlair())); - } - - public short GetFlairColor() - { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/31/c0e1dbcdcf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/31/c0e1dbcdcf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 276d1df..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/31/c0e1dbcdcf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,363 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(player, p); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - player.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/32/907f4f6a44a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/32/907f4f6a44a600151c15ab42d7919fee deleted file mode 100644 index 8a203ea..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/32/907f4f6a44a600151c15ab42d7919fee +++ /dev/null @@ -1,367 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); // TODO: Quiz queue - // TODO: Flairs from Command Block The Button - Teams - //PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - event.getPlayer().setPlayerListName(""); - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer() - .getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/34/40f80735d5a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/34/40f80735d5a500151c15ab42d7919fee deleted file mode 100644 index 372cbb8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/34/40f80735d5a500151c15ab42d7919fee +++ /dev/null @@ -1,370 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); //TODO: Quiz queue - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - /* - * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) - * .getChannelsHandler().getActiveChannel(e.getPlayer(), - * channelTypes.GLOBAL); - */ - /* - * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( - * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if - * (modes.size() == 0 || modes.contains("g")) { - */ - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/34/b097b71bce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/34/b097b71bce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 1f5948c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/34/b097b71bce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,354 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - String finalflair; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/37/20e61fc4d13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/37/20e61fc4d13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 39f0d07..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/37/20e61fc4d13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,370 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - MaybeOfflinePlayer.AllPlayers.clear(); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/37/c0f63c61e240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/37/c0f63c61e240001514c09dece48b36c7 deleted file mode 100644 index 7cad3e7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/37/c0f63c61e240001514c09dece48b36c7 +++ /dev/null @@ -1,451 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - public static ConsoleSender Console; //2015.08.12. - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - SaveFiles(); //2015.08.09. - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - //System.out.println("Start: "+start); - if(start==-1+"IGN:".length()) //+length: 2015.08.10. - continue; //2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - //System.out.println("End: "+end); - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - //System.out.println("IGN: "+ign); - ign = ign.trim(); - //System.out.println("Trimmed IGN: "+ign); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - /*else - flair = "non-presser";*/ - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - //return p.Flair!=null; //2015.08.08. - return p.CommentedOnReddit; //2015.08.10. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - p.FlairRecognised=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(--s)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(??s)§r"; - break; - case "unknown": - if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair - p.FlairDecided=false; - else - p.FlairRecognised=false; - finalflair=""; - break; - default: - //finalflair=""; - //break; - return; - } - /*if(finalflair.length()==0) //<-- 2015.07.20. - return;*/ - p.Flair=finalflair; //2015.08.08. - p.CommentedOnReddit=true; //2015.08.10. - p.UserName=username; //2015.08.08. - if(finalflair.length()==0) //Just for the message - finalflair="undecided"; - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - //return flair==null ? "" : flair; - return flair; //2015.08.10. - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //<-- 2015.08.10. - TownColors.put(s[0], s[1]); - } - br.close(); - } - file=new File("customflairs.txt"); //2015.08.09. - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //2015.08.10. - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); - p.Flair=s[1]; //2015.08.09. - p.CommentedOnReddit=true; //Kind of - } - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static void SaveFiles() //<-- 2015.08.09. - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static boolean RemoveLineFromFile(String file, String line) - { //2015.08.09. - File inputFile = new File(file); - File tempFile = new File("_temp.txt"); - - if(!inputFile.exists()) - return true; //2015.08.10. - - try { - BufferedReader reader = new BufferedReader(new FileReader(inputFile)); - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - - String lineToRemove = line; - String currentLine; - - while((currentLine = reader.readLine()) != null) { - // trim newline when comparing with lineToRemove - String trimmedLine = currentLine.trim(); - //if(trimmedLine.equals(lineToRemove)) continue; - if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. - writer.write(currentLine + System.getProperty("line.separator")); - } - writer.close(); - reader.close(); - if(!tempFile.renameTo(inputFile)) - { - inputFile.delete(); - return tempFile.renameTo(inputFile); - } - else - return true; - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - return false; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/38/209c0ada49a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/38/209c0ada49a600151c15ab42d7919fee deleted file mode 100644 index 1310b41..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/38/209c0ada49a600151c15ab42d7919fee +++ /dev/null @@ -1,353 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.IOUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.htmlcleaner.HtmlCleaner; -import org.htmlcleaner.TagNode; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.*; -import java.lang.String; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.URLConnection; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.TimeZone; - -public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. - // A user, which flair isn't obtainable: - // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - public static PluginMain Instance; - public static ConsoleCommandSender Console; // 2015.08.12. - - // Fired when plugin is first enabled - @Override - public void onEnable() { - try { - System.out.println("Extracting necessary libraries..."); - final File[] libs = new File[] { new File(getDataFolder(), - "htmlcleaner-2.16.jar") }; - for (final File lib : libs) { - if (!lib.exists()) { - JarUtils.extractFromJar(lib.getName(), - lib.getAbsolutePath()); - } - } - for (final File lib : libs) { - if (!lib.exists()) { - getLogger().warning( - "Failed to load plugin! Could not find lib: " - + lib.getName()); - Bukkit.getServer().getPluginManager().disablePlugin(this); - return; - } - addClassPath(JarUtils.getJarUrl(lib)); - } - } catch (final Exception e) { - e.printStackTrace(); - } - - getServer().getPluginManager().registerEvents(new PlayerListener(), - this); - Commands comm = new Commands(); - this.getCommand("u").setExecutor(comm); - this.getCommand("u").setUsage( - this.getCommand("u").getUsage().replace('&', '§')); - this.getCommand("nrp").setExecutor(comm); - this.getCommand("nrp").setUsage( - this.getCommand("nrp").getUsage().replace('&', '§')); - this.getCommand("ooc").setExecutor(comm); - this.getCommand("ooc").setUsage( - this.getCommand("ooc").getUsage().replace('&', '§')); - Instance = this; // 2015.08.08. - Console = this.getServer().getConsoleSender(); // 2015.08.12. - LoadFiles(false); // 2015.08.09. - Runnable r = new Runnable() { - public void run() { - ThreadMethod(); - } - }; - Thread t = new Thread(r); - t.start(); - r = new Runnable() { - public void run() { - AnnouncerThread.Run(); - } - }; - t = new Thread(r); - t.start(); - } - - public Boolean stop = false; - - // Fired when plugin is disabled - @Override - public void onDisable() { - SaveFiles(); // 2015.08.09. - stop = true; - } - - private void ThreadMethod() { - while (!stop) { - try { - String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json = new JSONArray(body).getJSONObject(1) - .getJSONObject("data").getJSONArray("children"); - for (Object obj : json) { - JSONObject item = (JSONObject) obj; - String author = item.getJSONObject("data").getString( - "author"); - String ign = item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - if (start == -1 + "IGN:".length()) // +length: 2015.08.10. - continue; // 2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end = ign.indexOf('\n', start); // 2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); - if (mp == null) - continue; - if (!mp.UserNames.contains(author)) - mp.UserNames.add(author); - if (mp.FlairState.equals(FlairStates.NoComment)) { - mp.FlairState = FlairStates.Commented; - ConfirmUserMessage(mp); - } - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } - try { - Thread.sleep(10000); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } catch (Exception e) { - // System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - } - - public void DownloadFlair(MaybeOfflinePlayer mp) - throws MalformedURLException, IOException { - String[] flairdata = DownloadString( - "http://karmadecay.com/thebutton-data.php?users=" + mp.UserName) - .replace("\"", "").split(":"); - String flair; - if (flairdata.length > 1) - flair = flairdata[1]; - else - flair = ""; - String flairclass; - if (flairdata.length > 2) - flairclass = flairdata[2]; - else - flairclass = "unknown"; - SetFlair(mp, flair, flairclass, mp.UserName); - } - - public static Exception LastException; // 2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, - IOException { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - private void SetFlair(MaybeOfflinePlayer p, String text, String flairclass, - String username) { - p.UserName = username; - p.FlairState = FlairStates.Recognised; - switch (flairclass) { - case "press-1": - p.SetFlairColor(0xc); - break; - case "press-2": - p.SetFlairColor(0x6); - break; - case "press-3": - p.SetFlairColor(0xe); - break; - case "press-4": - p.SetFlairColor(0xa); - break; - case "press-5": - p.SetFlairColor(0x9); - break; - case "press-6": - p.SetFlairColor(0x5); - break; - case "no-press": - p.SetFlairColor(0x7); - break; - case "cheater": - p.SetFlairColor(0x5); - break; - case "cant-press": - p.SetFlairColor(0xf); - break; - case "unknown": - if (text.equals("-1")) // If true, only non-presser/can't press; if - // false, any flair - { - try { - if (CheckForJoinDate(p)) { - p.SetFlair(0x7, "--"); - } else { - p.SetFlair(0xf, "--"); - } - } catch (Exception e) { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - e.printStackTrace(); - } - } else { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - } - return; - default: - return; - } - if (text.equals("-1")) - text = "--"; - p.FlairTime = text; - } - - public static boolean CheckForJoinDate(MaybeOfflinePlayer mp) - throws Exception { - URL url = new URL("https://www.reddit.com/u/" + mp.UserName); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - HtmlCleaner cleaner = new HtmlCleaner(); - TagNode node = cleaner.clean(in); - - node = node.getElementsByAttValue("class", "age", true, true)[0]; - node = node.getElementsByName("time", false)[0]; - String joindate = node.getAttributeByName("datetime"); - SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd"); - joindate = joindate.split("T")[0]; - Date date = parserSDF.parse(joindate); - return date.before(new Calendar.Builder() - .setTimeZone(TimeZone.getTimeZone("UTC")).setDate(2015, 4, 1) - .build().getTime()); - } - - public static void ConfirmUserMessage(MaybeOfflinePlayer mp) { - Player p = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented) && p != null) - if (mp.UserNames.size() > 1) - p.sendMessage("§9Multiple Reddit users commented your name. You can select with /u accept.§r §6Type /u accept or /u ignore§r"); - else - p.sendMessage("§9A Reddit user commented your name. Is that you?§r §6Type /u accept or /u ignore§r"); - } - - public static Collection GetPlayers() { - return Instance.getServer().getOnlinePlayers(); - } - - public static ArrayList AnnounceMessages = new ArrayList<>(); - public static int AnnounceTime = 15 * 60 * 1000; - - public static void LoadFiles(boolean reload) { - if (reload) { - System.out - .println("The Button Minecraft plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - AnnounceMessages.clear(); - } - System.out.println("Loading files for The Button Minecraft plugin..."); - try { - File file = new File("announcemessages.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsaccepted.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsignored.txt"); - if (file.exists()) - file.delete(); - file = new File("thebuttonmc.yml"); - if (file.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - yc.load(file); - MaybeOfflinePlayer.Load(yc); - PlayerListener.NotificationSound = yc - .getString("notificationsound"); - PlayerListener.NotificationPitch = yc - .getDouble("notificationpitch"); - AnnounceTime = yc.getInt("announcetime"); - AnnounceMessages.addAll(yc.getStringList("announcements")); - } - System.out.println("The Button Minecraft plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } catch (InvalidConfigurationException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - public static void SaveFiles() { - System.out.println("Saving files for The Button Minecraft plugin..."); - try { - File file = new File("thebuttonmc.yml"); - YamlConfiguration yc = new YamlConfiguration(); - MaybeOfflinePlayer.Save(yc); - yc.set("notificationsound", PlayerListener.NotificationSound); - yc.set("notificationpitch", PlayerListener.NotificationPitch); - yc.set("announcetime", AnnounceTime); - yc.set("announcements", AnnounceMessages); - yc.save(file); - System.out.println("The Button Minecraft plugin saved files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - private void addClassPath(final URL url) throws IOException { - final URLClassLoader sysloader = (URLClassLoader) ClassLoader - .getSystemClassLoader(); - final Class sysclass = URLClassLoader.class; - try { - final Method method = sysclass.getDeclaredMethod("addURL", - new Class[] { URL.class }); - method.setAccessible(true); - method.invoke(sysloader, new Object[] { url }); - } catch (final Throwable t) { - t.printStackTrace(); - throw new IOException("Error adding " + url - + " to system classloader"); - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/38/a0523ba549a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/38/a0523ba549a600151c15ab42d7919fee deleted file mode 100644 index cfd3af2..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/38/a0523ba549a600151c15ab42d7919fee +++ /dev/null @@ -1,125 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) { - FlairColor = color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p = Bukkit.getPlayer(UUID); - p.setPlayerListName(String.format("%s%s", p.getPlayerListName(), - GetFormattedFlair())); - } - - public short GetFlairColor() { - return FlairColor; - } - - public String GetFlairTime() { - return FlairTime; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/38/a0f3a0e9cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/38/a0f3a0e9cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 327e9f3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/38/a0f3a0e9cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,197 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(player, p); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/39/2006034ad03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/39/2006034ad03e001518fa86d7ae2a1cf8 deleted file mode 100644 index c6af7c6..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/39/2006034ad03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,201 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3b/30bdb825cd3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/3b/30bdb825cd3e001518fa86d7ae2a1cf8 deleted file mode 100644 index a9fdf9d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3b/30bdb825cd3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,25 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.HashMap; - -public class MaybeOfflinePlayer -{ //2015.08.08. - public String PlayerName; - public String UserName; - public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not - public boolean AcceptedFlair; - public boolean IgnoredFlair; - public - public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. - public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) - { - if(!AllPlayers.containsKey(playername)) - { - MaybeOfflinePlayer player=new MaybeOfflinePlayer(); - player.PlayerName=playername; - AllPlayers.put(playername, player); - return player; - } - return AllPlayers.get(playername); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3b/50ce8dd8d4a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/3b/50ce8dd8d4a500151c15ab42d7919fee deleted file mode 100644 index 947236f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3b/50ce8dd8d4a500151c15ab42d7919fee +++ /dev/null @@ -1,369 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", mp.FlairColor); - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - /* - * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) - * .getChannelsHandler().getActiveChannel(e.getPlayer(), - * channelTypes.GLOBAL); - */ - /* - * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( - * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if - * (modes.size() == 0 || modes.contains("g")) { - */ - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3c/205637bed23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/3c/205637bed23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 19e20e0..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3c/205637bed23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true) - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3c/d00a0e58e240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/3c/d00a0e58e240001514c09dece48b36c7 deleted file mode 100644 index e68eaa6..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3c/d00a0e58e240001514c09dece48b36c7 +++ /dev/null @@ -1,450 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - SaveFiles(); //2015.08.09. - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - //System.out.println("Start: "+start); - if(start==-1+"IGN:".length()) //+length: 2015.08.10. - continue; //2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - //System.out.println("End: "+end); - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - //System.out.println("IGN: "+ign); - ign = ign.trim(); - //System.out.println("Trimmed IGN: "+ign); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - /*else - flair = "non-presser";*/ - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - //return p.Flair!=null; //2015.08.08. - return p.CommentedOnReddit; //2015.08.10. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - p.FlairRecognised=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(--s)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(??s)§r"; - break; - case "unknown": - if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair - p.FlairDecided=false; - else - p.FlairRecognised=false; - finalflair=""; - break; - default: - //finalflair=""; - //break; - return; - } - /*if(finalflair.length()==0) //<-- 2015.07.20. - return;*/ - p.Flair=finalflair; //2015.08.08. - p.CommentedOnReddit=true; //2015.08.10. - p.UserName=username; //2015.08.08. - if(finalflair.length()==0) //Just for the message - finalflair="undecided"; - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - //return flair==null ? "" : flair; - return flair; //2015.08.10. - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //<-- 2015.08.10. - TownColors.put(s[0], s[1]); - } - br.close(); - } - file=new File("customflairs.txt"); //2015.08.09. - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //2015.08.10. - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); - p.Flair=s[1]; //2015.08.09. - p.CommentedOnReddit=true; //Kind of - } - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static void SaveFiles() //<-- 2015.08.09. - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static boolean RemoveLineFromFile(String file, String line) - { //2015.08.09. - File inputFile = new File(file); - File tempFile = new File("_temp.txt"); - - if(!inputFile.exists()) - return true; //2015.08.10. - - try { - BufferedReader reader = new BufferedReader(new FileReader(inputFile)); - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - - String lineToRemove = line; - String currentLine; - - while((currentLine = reader.readLine()) != null) { - // trim newline when comparing with lineToRemove - String trimmedLine = currentLine.trim(); - //if(trimmedLine.equals(lineToRemove)) continue; - if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. - writer.write(currentLine + System.getProperty("line.separator")); - } - writer.close(); - reader.close(); - if(!tempFile.renameTo(inputFile)) - { - inputFile.delete(); - return tempFile.renameTo(inputFile); - } - else - return true; - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - return false; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3e/6022916ee240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/3e/6022916ee240001514c09dece48b36c7 deleted file mode 100644 index 75e4c81..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3e/6022916ee240001514c09dece48b36c7 +++ /dev/null @@ -1,452 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - public static ConsoleCommandSender Console; //2015.08.12. - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - SaveFiles(); //2015.08.09. - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - //System.out.println("Start: "+start); - if(start==-1+"IGN:".length()) //+length: 2015.08.10. - continue; //2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - //System.out.println("End: "+end); - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - //System.out.println("IGN: "+ign); - ign = ign.trim(); - //System.out.println("Trimmed IGN: "+ign); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - /*else - flair = "non-presser";*/ - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - //return p.Flair!=null; //2015.08.08. - return p.CommentedOnReddit; //2015.08.10. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - p.FlairRecognised=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(--s)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(??s)§r"; - break; - case "unknown": - if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair - p.FlairDecided=false; - else - p.FlairRecognised=false; - finalflair=""; - break; - default: - //finalflair=""; - //break; - return; - } - /*if(finalflair.length()==0) //<-- 2015.07.20. - return;*/ - p.Flair=finalflair; //2015.08.08. - p.CommentedOnReddit=true; //2015.08.10. - p.UserName=username; //2015.08.08. - if(finalflair.length()==0) //Just for the message - finalflair="undecided"; - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - //return flair==null ? "" : flair; - return flair; //2015.08.10. - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //<-- 2015.08.10. - TownColors.put(s[0], s[1]); - } - br.close(); - } - file=new File("customflairs.txt"); //2015.08.09. - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //2015.08.10. - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); - p.Flair=s[1]; //2015.08.09. - p.CommentedOnReddit=true; //Kind of - } - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static void SaveFiles() //<-- 2015.08.09. - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static boolean RemoveLineFromFile(String file, String line) - { //2015.08.09. - File inputFile = new File(file); - File tempFile = new File("_temp.txt"); - - if(!inputFile.exists()) - return true; //2015.08.10. - - try { - BufferedReader reader = new BufferedReader(new FileReader(inputFile)); - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - - String lineToRemove = line; - String currentLine; - - while((currentLine = reader.readLine()) != null) { - // trim newline when comparing with lineToRemove - String trimmedLine = currentLine.trim(); - //if(trimmedLine.equals(lineToRemove)) continue; - if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. - writer.write(currentLine + System.getProperty("line.separator")); - } - writer.close(); - reader.close(); - if(!tempFile.renameTo(inputFile)) - { - inputFile.delete(); - return tempFile.renameTo(inputFile); - } - else - return true; - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - return false; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3f/a0709f19cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/a0709f19cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 9476659..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3f/a0709f19cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,362 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, flair); //2015.07.20. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4/b030d637cd3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/4/b030d637cd3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 587e2b6..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4/b030d637cd3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,29 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.HashMap; - -public class MaybeOfflinePlayer -{ //2015.08.08. - public String PlayerName; - public String UserName; - public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not - public boolean AcceptedFlair; - public boolean IgnoredFlair; - //public - public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. - public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) - { - if(!AllPlayers.containsKey(playername)) - { - MaybeOfflinePlayer player=new MaybeOfflinePlayer(); - player.PlayerName=playername; - AllPlayers.put(playername, player); - return player; - } - return AllPlayers.get(playername); - } - public enum FlairClassType - { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/41/20453fde49a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/41/20453fde49a600151c15ab42d7919fee deleted file mode 100644 index 5721445..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/41/20453fde49a600151c15ab42d7919fee +++ /dev/null @@ -1,353 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.IOUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.htmlcleaner.HtmlCleaner; -import org.htmlcleaner.TagNode; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.*; -import java.lang.String; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.URLConnection; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.TimeZone; - -public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. - // A user, which flair isn't obtainable: - // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - public static PluginMain Instance; - public static ConsoleCommandSender Console; // 2015.08.12. - - // Fired when plugin is first enabled - @Override - public void onEnable() { - try { - System.out.println("Extracting necessary libraries..."); - final File[] libs = new File[] { new File(getDataFolder(), - "htmlcleaner-2.16.jar") }; - for (final File lib : libs) { - if (!lib.exists()) { - JarUtils.extractFromJar(lib.getName(), - lib.getAbsolutePath()); - } - } - for (final File lib : libs) { - if (!lib.exists()) { - getLogger().warning( - "Failed to load plugin! Could not find lib: " - + lib.getName()); - Bukkit.getServer().getPluginManager().disablePlugin(this); - return; - } - addClassPath(JarUtils.getJarUrl(lib)); - } - } catch (final Exception e) { - e.printStackTrace(); - } - - getServer().getPluginManager().registerEvents(new PlayerListener(), - this); - Commands comm = new Commands(); - this.getCommand("u").setExecutor(comm); - this.getCommand("u").setUsage( - this.getCommand("u").getUsage().replace('&', '§')); - this.getCommand("nrp").setExecutor(comm); - this.getCommand("nrp").setUsage( - this.getCommand("nrp").getUsage().replace('&', '§')); - this.getCommand("ooc").setExecutor(comm); - this.getCommand("ooc").setUsage( - this.getCommand("ooc").getUsage().replace('&', '§')); - Instance = this; // 2015.08.08. - Console = this.getServer().getConsoleSender(); // 2015.08.12. - LoadFiles(false); // 2015.08.09. - Runnable r = new Runnable() { - public void run() { - ThreadMethod(); - } - }; - Thread t = new Thread(r); - t.start(); - r = new Runnable() { - public void run() { - AnnouncerThread.Run(); - } - }; - t = new Thread(r); - t.start(); - } - - public Boolean stop = false; - - // Fired when plugin is disabled - @Override - public void onDisable() { - SaveFiles(); // 2015.08.09. - stop = true; - } - - private void ThreadMethod() { - while (!stop) { - try { - String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json = new JSONArray(body).getJSONObject(1) - .getJSONObject("data").getJSONArray("children"); - for (Object obj : json) { - JSONObject item = (JSONObject) obj; - String author = item.getJSONObject("data").getString( - "author"); - String ign = item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - if (start == -1 + "IGN:".length()) // +length: 2015.08.10. - continue; // 2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end = ign.indexOf('\n', start); // 2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); - if (mp == null) - continue; - if (!mp.UserNames.contains(author)) - mp.UserNames.add(author); - if (mp.FlairState.equals(FlairStates.NoComment)) { - mp.FlairState = FlairStates.Commented; - ConfirmUserMessage(mp); - } - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } - try { - Thread.sleep(10000); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } catch (Exception e) { - // System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - } - - public void DownloadFlair(MaybeOfflinePlayer mp) - throws MalformedURLException, IOException { - String[] flairdata = DownloadString( - "http://karmadecay.com/thebutton-data.php?users=" + mp.UserName) - .replace("\"", "").split(":"); - String flair; - if (flairdata.length > 1) - flair = flairdata[1]; - else - flair = ""; - String flairclass; - if (flairdata.length > 2) - flairclass = flairdata[2]; - else - flairclass = "unknown"; - SetFlair(mp, flair, flairclass, mp.UserName); - } - - public static Exception LastException; // 2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, - IOException { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - private void SetFlair(MaybeOfflinePlayer p, String text, String flairclass, - String username) { - p.UserName = username; - p.FlairState = FlairStates.Recognised; - switch (flairclass) { - case "press-1": - p.SetFlairColor(0xc); - break; - case "press-2": - p.SetFlairColor(0x6); - break; - case "press-3": - p.SetFlairColor(0xe); - break; - case "press-4": - p.SetFlairColor(0xa); - break; - case "press-5": - p.SetFlairColor(0x9); - break; - case "press-6": - p.SetFlairColor(0x5); - break; - case "no-press": - p.SetFlairColor(0x7); - break; - case "cheater": - p.SetFlairColor(0x5); - break; - case "cant-press": - p.SetFlairColor(0xf); - break; - case "unknown": - if (text.equals("-1")) // If true, only non-presser/can't press; if - // false, any flair - { - try { - if (CheckForJoinDate(p)) { - p.SetFlair(0x7, "--"); - } else { - p.SetFlair(0xf, "--"); - } - } catch (Exception e) { - p.FlairState = FlairStates.Commented; // Flair unknown - p.SetFlairColor(0); - e.printStackTrace(); - } - } else { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - } - return; - default: - return; - } - if (text.equals("-1")) - text = "--"; - p.FlairTime = text; - } - - public static boolean CheckForJoinDate(MaybeOfflinePlayer mp) - throws Exception { - URL url = new URL("https://www.reddit.com/u/" + mp.UserName); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - HtmlCleaner cleaner = new HtmlCleaner(); - TagNode node = cleaner.clean(in); - - node = node.getElementsByAttValue("class", "age", true, true)[0]; - node = node.getElementsByName("time", false)[0]; - String joindate = node.getAttributeByName("datetime"); - SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd"); - joindate = joindate.split("T")[0]; - Date date = parserSDF.parse(joindate); - return date.before(new Calendar.Builder() - .setTimeZone(TimeZone.getTimeZone("UTC")).setDate(2015, 4, 1) - .build().getTime()); - } - - public static void ConfirmUserMessage(MaybeOfflinePlayer mp) { - Player p = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented) && p != null) - if (mp.UserNames.size() > 1) - p.sendMessage("§9Multiple Reddit users commented your name. You can select with /u accept.§r §6Type /u accept or /u ignore§r"); - else - p.sendMessage("§9A Reddit user commented your name. Is that you?§r §6Type /u accept or /u ignore§r"); - } - - public static Collection GetPlayers() { - return Instance.getServer().getOnlinePlayers(); - } - - public static ArrayList AnnounceMessages = new ArrayList<>(); - public static int AnnounceTime = 15 * 60 * 1000; - - public static void LoadFiles(boolean reload) { - if (reload) { - System.out - .println("The Button Minecraft plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - AnnounceMessages.clear(); - } - System.out.println("Loading files for The Button Minecraft plugin..."); - try { - File file = new File("announcemessages.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsaccepted.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsignored.txt"); - if (file.exists()) - file.delete(); - file = new File("thebuttonmc.yml"); - if (file.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - yc.load(file); - MaybeOfflinePlayer.Load(yc); - PlayerListener.NotificationSound = yc - .getString("notificationsound"); - PlayerListener.NotificationPitch = yc - .getDouble("notificationpitch"); - AnnounceTime = yc.getInt("announcetime"); - AnnounceMessages.addAll(yc.getStringList("announcements")); - } - System.out.println("The Button Minecraft plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } catch (InvalidConfigurationException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - public static void SaveFiles() { - System.out.println("Saving files for The Button Minecraft plugin..."); - try { - File file = new File("thebuttonmc.yml"); - YamlConfiguration yc = new YamlConfiguration(); - MaybeOfflinePlayer.Save(yc); - yc.set("notificationsound", PlayerListener.NotificationSound); - yc.set("notificationpitch", PlayerListener.NotificationPitch); - yc.set("announcetime", AnnounceTime); - yc.set("announcements", AnnounceMessages); - yc.save(file); - System.out.println("The Button Minecraft plugin saved files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - private void addClassPath(final URL url) throws IOException { - final URLClassLoader sysloader = (URLClassLoader) ClassLoader - .getSystemClassLoader(); - final Class sysclass = URLClassLoader.class; - try { - final Method method = sysclass.getDeclaredMethod("addURL", - new Class[] { URL.class }); - method.setAccessible(true); - method.invoke(sysloader, new Object[] { url }); - } catch (final Throwable t) { - t.printStackTrace(); - throw new IOException("Error adding " + url - + " to system classloader"); - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/41/c0d7140345a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/41/c0d7140345a600151c15ab42d7919fee deleted file mode 100644 index f38d34c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/41/c0d7140345a600151c15ab42d7919fee +++ /dev/null @@ -1,112 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) - { - } - - public void SetFlairTime(String time) - { - - } - - public void SetFlair(short color, String time) - { - - } - - private void SetFlair2() - { - - //Flairs from Command Block The Button - Teams - //PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - event.getPlayer().setPlayerListName(""); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/44/3078a0bed23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/44/3078a0bed23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 717cff8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/44/3078a0bed23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/44/b01fe45045a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/44/b01fe45045a600151c15ab42d7919fee deleted file mode 100644 index ab3ff1c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/44/b01fe45045a600151c15ab42d7919fee +++ /dev/null @@ -1,113 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) { - FlairColor = color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - event.getPlayer().setPlayerListName(""); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/46/a0e24f1ad43e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/46/a0e24f1ad43e001518fa86d7ae2a1cf8 deleted file mode 100644 index 678f6a5..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/46/a0e24f1ad43e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,221 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done."); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - DoReload(player); //2015.08.09. - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/47/209354bad13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/47/209354bad13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 1a55983..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/47/209354bad13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,370 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) - { - if(reload) - MaybeOfflinePlayer.AllPlayers.clear(); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/47/20a74d8ad13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/47/20a74d8ad13e001518fa86d7ae2a1cf8 deleted file mode 100644 index c0e1cef..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/47/20a74d8ad13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,368 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) - { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/49/203c0b4ad33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/49/203c0b4ad33e001518fa86d7ae2a1cf8 deleted file mode 100644 index 1cec033..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/49/203c0b4ad33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/49/a04d8dc3d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/49/a04d8dc3d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 5d7321f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/49/a04d8dc3d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/49/b0556e29ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/49/b0556e29ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 26a60f9..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/49/b0556e29ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,355 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - String finalflair; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4a/20662b05d33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/4a/20662b05d33e001518fa86d7ae2a1cf8 deleted file mode 100644 index 63c2d54..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4a/20662b05d33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4b/203dd097ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/4b/203dd097ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 4e85b74..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4b/203dd097ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,358 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4b/40b1bfa8755d001515f3fd278c34f57e b/.metadata/.plugins/org.eclipse.core.resources/.history/4b/40b1bfa8755d001515f3fd278c34f57e deleted file mode 100644 index 2d88af8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4b/40b1bfa8755d001515f3fd278c34f57e +++ /dev/null @@ -1,465 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; -import org.apache.commons.io.IOUtils; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.*; -import java.lang.String; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. - // A user, which flair isn't obtainable: - // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - public static PluginMain Instance; - public static ConsoleCommandSender Console; // 2015.08.12. - - // Fired when plugin is first enabled - @Override - public void onEnable() { - System.out.println("The Button Minecraft server plugin"); - getServer().getPluginManager().registerEvents(new PlayerListener(), - this); - Commands comm = new Commands(); - this.getCommand("u").setExecutor(comm); - this.getCommand("u").setUsage( - this.getCommand("u").getUsage().replace('&', '§')); - this.getCommand("nrp").setExecutor(comm); - this.getCommand("nrp").setUsage( - this.getCommand("nrp").getUsage().replace('&', '§')); - this.getCommand("ooc").setExecutor(comm); - this.getCommand("ooc").setUsage( - this.getCommand("ooc").getUsage().replace('&', '§')); - Instance = this; // 2015.08.08. - Console = this.getServer().getConsoleSender(); // 2015.08.12. - LoadFiles(false); // 2015.08.09. - Runnable r = new Runnable() { - public void run() { - ThreadMethod(); - } - }; - Thread t = new Thread(r); - t.start(); - r = new Runnable() { - public void run() { - AnnouncerThread.Run(); - } - }; - t = new Thread(r); - t.start(); - } - - public Boolean stop = false; - - // Fired when plugin is disabled - @Override - public void onDisable() { - SaveFiles(); // 2015.08.09. - stop = true; - } - - public void ThreadMethod() // <-- 2015.07.16. - { - while (!stop) { - try { - String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json = new JSONArray(body).getJSONObject(1) - .getJSONObject("data").getJSONArray("children"); - for (Object obj : json) { - JSONObject item = (JSONObject) obj; - String author = item.getJSONObject("data").getString( - "author"); - String ign = item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - if (start == -1 + "IGN:".length()) // +length: 2015.08.10. - continue; // 2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end = ign.indexOf('\n', start); // 2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if (HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString( - "http://karmadecay.com/thebutton-data.php?users=" - + author).replace("\"", "").split(":"); - String flair; - if (flairdata.length > 1) // 2015.07.15. - flair = flairdata[1]; - else - flair = ""; - if (flair != "-1") - flair = flair + "s"; - String flairclass; - if (flairdata.length > 2) - flairclass = flairdata[2]; - else - flairclass = "unknown"; - SetFlair(ign, flair, flairclass, author); - } - try { - Thread.sleep(10000); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } catch (Exception e) { - System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - } - - public static Exception LastException; // 2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, - IOException { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors = new HashMap(); // 2015.07.20. - - public Boolean HasIGFlair(String playername) { - MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(playername); // 2015.08.08. - return p.CommentedOnReddit; // 2015.08.10. - } - - public void SetFlair(String playername, String text, String flairclass, - String username) { - MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(playername); // 2015.08.08. - String finalflair; - p.FlairDecided = true; - p.FlairRecognised = true; - switch (flairclass) { - case "press-1": - finalflair = "§c(" + text + ")§r"; - break; - case "press-2": - finalflair = "§6(" + text + ")§r"; - break; - case "press-3": - finalflair = "§e(" + text + ")§r"; - break; - case "press-4": - finalflair = "§a(" + text + ")§r"; - break; - case "press-5": - finalflair = "§9(" + text + ")§r"; - break; - case "press-6": - finalflair = "§5(" + text + ")§r"; - break; - case "no-press": - finalflair = "§7(--s)§r"; - break; - case "cheater": - finalflair = "§5(" + text + ")§r"; - break; - case "cant-press": // 2015.08.08. - finalflair = "§r(??s)§r"; - break; - case "unknown": - if (text.equals("-1")) // If true, only non-presser/can't press; if - // false, any flair - p.FlairDecided = false; - else - p.FlairRecognised = false; - finalflair = ""; - break; - default: - return; - } - p.Flair = finalflair; // 2015.08.08. - p.CommentedOnReddit = true; // 2015.08.10. - p.UserName = username; // 2015.08.08. - for (Player player : getServer().getOnlinePlayers()) // <-- 2015.08.08. - { - if (player.getName().equals(playername)) { - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) { // 2015.07.16. - String flair = MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; // 2015.08.08. - // return flair==null ? "" : flair; - return flair; // 2015.08.10. - } - - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, - Player p) // <-- 2015.08.09. - { - - if (MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if (MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) { - if (!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); // 2015.08.09. - } else - p.sendMessage("§9Are you Reddit user " + player.UserName - + "?§r §6Type /u accept or /u ignore§r"); - } - - public static String GetColorForTown(String townname) { // 2015.07.20. - if (TownColors.containsKey(townname)) - return TownColors.get(townname); - return ""; - } - - public static String GetPlayerTown(Player player) { // 2015.07.20. - try { - Town town = WorldCoord.parseWorldCoord(player).getTownBlock() - .getTown(); // TODO - return town.getName(); - } catch (Exception e) { - return ""; - } - } - - public static Collection GetPlayers() { - return Instance.getServer().getOnlinePlayers(); - } - - public static ArrayList AnnounceMessages = new ArrayList<>(); - public static int AnnounceTime = 15 * 60 * 1000; - - public static void LoadFiles(boolean reload) // <-- 2015.08.09. - { - if (reload) { // 2015.08.09. - System.out - .println("The Button Minecraft plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - AnnounceMessages.clear(); - } - System.out.println("Loading files for The Button Minecraft plugin..."); // 2015.08.09. - try { - File file = new File("flairsaccepted.txt"); - if (file.exists()) { - BufferedReader br = new BufferedReader(new FileReader( - "flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) { - String name = line.replace("\n", ""); - // System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair = true; // 2015.08.08. - } - br.close(); - } - file = new File("flairsignored.txt"); - if (file.exists()) { - BufferedReader br = new BufferedReader(new FileReader( - "flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) { - String name = line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair = true; // 2015.08.08. - } - br.close(); - } - file = new File("autoflairconfig.txt"); - if (file.exists()) { - BufferedReader br = new BufferedReader(new FileReader(file)); - String line; - while ((line = br.readLine()) != null) { - String[] s = line.split(" "); - if (s.length >= 2) // <-- 2015.08.10. - TownColors.put(s[0], s[1]); - } - br.close(); - } - file = new File("customflairs.txt"); // 2015.08.09. - if (file.exists()) { - BufferedReader br = new BufferedReader(new FileReader(file)); - String line; - while ((line = br.readLine()) != null) { - String[] s = line.split(" "); - if (s.length >= 2) // 2015.08.10. - { - MaybeOfflinePlayer p = MaybeOfflinePlayer - .AddPlayerIfNeeded(s[0]); - p.Flair = s[1]; // 2015.08.09. - p.CommentedOnReddit = true; // Kind of - p.FlairDecided = true; - p.FlairRecognised = true; - } - } - br.close(); - } - file = new File("notificationsound.txt"); // 2015.08.09. - if (file.exists()) { - BufferedReader br = new BufferedReader(new FileReader(file)); - String line = br.readLine(); - String[] split = line.split(" "); - PlayerListener.NotificationSound = split[0]; - PlayerListener.NotificationPitch = Float.parseFloat(split[1]); - br.close(); - } - file = new File("announcemessages.txt"); // 2015.08.09. - if (file.exists()) { - BufferedReader br = new BufferedReader(new FileReader(file)); - String line; - boolean first = true; - while ((line = br.readLine()) != null) { - if (first) { - AnnounceTime = Integer.parseInt(line.trim()); - first = false; - } else - AnnounceMessages.add(line.trim()); - } - br.close(); - } else { - // Write time - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file)); - bw.write(AnnounceTime + "\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - System.out.println("The Button Minecraft plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - - public static void SaveFiles() // <-- 2015.08.09. - { - try { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } catch (Exception e) { - System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - try { - File file = new File("flairsaccepted.txt"); - BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); - for (MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers - .values()) // <-- 2015.08.08. - { - if (!player.AcceptedFlair) - continue; // 2015.08.08. - bw.write(player.PlayerName + "\n"); - } - bw.close(); - file = new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for (MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers - .values()) // <-- 2015.08.08. - { - if (!player.IgnoredFlair) - continue; // 2015.08.08. - bw.write(player.PlayerName + "\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - - public static boolean RemoveLineFromFile(String file, String line) { // 2015.08.09. - File inputFile = new File(file); - File tempFile = new File("_temp.txt"); - - if (!inputFile.exists()) - return true; // 2015.08.10. - - try { - BufferedReader reader = new BufferedReader( - new FileReader(inputFile)); - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - - String lineToRemove = line; - String currentLine; - - while ((currentLine = reader.readLine()) != null) { - // trim newline when comparing with lineToRemove - String trimmedLine = currentLine.trim(); - if (trimmedLine.split(" ")[0].equals(lineToRemove)) - continue; // 2015.08.17. - writer.write(currentLine + System.getProperty("line.separator")); - } - writer.close(); - reader.close(); - if (!tempFile.renameTo(inputFile)) { - inputFile.delete(); - return tempFile.renameTo(inputFile); - } else - return true; - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - return false; - } - - public static boolean RemoveLineFromFile(String file, int index) { - File inputFile = new File(file); - File tempFile = new File("_temp2.txt"); - - if (!inputFile.exists()) - return true; // 2015.08.10. - - try { - BufferedReader reader = new BufferedReader( - new FileReader(inputFile)); - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - - String currentLine; - int i = 0; - - while ((currentLine = reader.readLine()) != null) { - if (i++ == index) - continue; - writer.write(currentLine + System.getProperty("line.separator")); - } - writer.close(); - reader.close(); - if (!tempFile.renameTo(inputFile)) { - inputFile.delete(); - return tempFile.renameTo(inputFile); - } else - return true; - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - return false; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4c/30becb7849a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/4c/30becb7849a600151c15ab42d7919fee deleted file mode 100644 index 2837b3f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4c/30becb7849a600151c15ab42d7919fee +++ /dev/null @@ -1,122 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) { - FlairColor = color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p = Bukkit.getPlayer(UUID); - p.setPlayerListName(String.format("%s%s", p.getPlayerListName(), - GetFormattedFlair())); - } - - public short GetFlairColor() - { - return FlairColor; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4d/a0ee15dcd13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/4d/a0ee15dcd13e001518fa86d7ae2a1cf8 deleted file mode 100644 index fb29d4f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4d/a0ee15dcd13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,373 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - if(reload) - { - MaybeOfflinePlayer.AllPlayers.clear(); //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4d/c045effe4ba600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/4d/c045effe4ba600151c15ab42d7919fee deleted file mode 100644 index fefe37f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4d/c045effe4ba600151c15ab42d7919fee +++ /dev/null @@ -1,353 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.IOUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.htmlcleaner.HtmlCleaner; -import org.htmlcleaner.TagNode; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.*; -import java.lang.String; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.URLConnection; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.TimeZone; - -public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. - // A user, which flair isn't obtainable: - // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - public static PluginMain Instance; - public static ConsoleCommandSender Console; // 2015.08.12. - - // Fired when plugin is first enabled - @Override - public void onEnable() { - try { - System.out.println("Extracting necessary libraries..."); - final File[] libs = new File[] { new File(getDataFolder(), - "htmlcleaner-2.16.jar") }; - for (final File lib : libs) { - if (!lib.exists()) { - JarUtils.extractFromJar(lib.getName(), - lib.getAbsolutePath()); - } - } - for (final File lib : libs) { - if (!lib.exists()) { - getLogger().warning( - "Failed to load plugin! Could not find lib: " - + lib.getName()); - Bukkit.getServer().getPluginManager().disablePlugin(this); - return; - } - addClassPath(JarUtils.getJarUrl(lib)); - } - } catch (final Exception e) { - e.printStackTrace(); - } - - getServer().getPluginManager().registerEvents(new PlayerListener(), - this); - Commands comm = new Commands(); - this.getCommand("u").setExecutor(comm); - this.getCommand("u").setUsage( - this.getCommand("u").getUsage().replace('&', '§')); - this.getCommand("nrp").setExecutor(comm); - this.getCommand("nrp").setUsage( - this.getCommand("nrp").getUsage().replace('&', '§')); - this.getCommand("ooc").setExecutor(comm); - this.getCommand("ooc").setUsage( - this.getCommand("ooc").getUsage().replace('&', '§')); - Instance = this; // 2015.08.08. - Console = this.getServer().getConsoleSender(); // 2015.08.12. - LoadFiles(false); // 2015.08.09. - Runnable r = new Runnable() { - public void run() { - ThreadMethod(); - } - }; - Thread t = new Thread(r); - t.start(); - r = new Runnable() { - public void run() { - AnnouncerThread.Run(); - } - }; - t = new Thread(r); - t.start(); - } - - public Boolean stop = false; - - // Fired when plugin is disabled - @Override - public void onDisable() { - SaveFiles(); // 2015.08.09. - stop = true; - } - - private void ThreadMethod() { - while (!stop) { - try { - String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json = new JSONArray(body).getJSONObject(1) - .getJSONObject("data").getJSONArray("children"); - for (Object obj : json) { - JSONObject item = (JSONObject) obj; - String author = item.getJSONObject("data").getString( - "author"); - String ign = item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - if (start == -1 + "IGN:".length()) // +length: 2015.08.10. - continue; // 2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end = ign.indexOf('\n', start); // 2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); - if (mp == null) - continue; - if (!mp.UserNames.contains(author)) - mp.UserNames.add(author); - if (mp.FlairState.equals(FlairStates.NoComment)) { - mp.FlairState = FlairStates.Commented; - ConfirmUserMessage(mp); - } - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } - try { - Thread.sleep(10000); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } catch (Exception e) { - // System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - } - - public void DownloadFlair(MaybeOfflinePlayer mp) - throws MalformedURLException, IOException { - String[] flairdata = DownloadString( - "http://karmadecay.com/thebutton-data.php?users=" + mp.UserName) - .replace("\"", "").split(":"); - String flair; - if (flairdata.length > 1) - flair = flairdata[1]; - else - flair = ""; - String flairclass; - if (flairdata.length > 2) - flairclass = flairdata[2]; - else - flairclass = "unknown"; - SetFlair(mp, flair, flairclass, mp.UserName); - } - - public static Exception LastException; // 2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, - IOException { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - private void SetFlair(MaybeOfflinePlayer p, String text, String flairclass, - String username) { - p.UserName = username; - p.FlairState = FlairStates.Recognised; - switch (flairclass) { - case "press-1": - p.SetFlairColor(0xc); - break; - case "press-2": - p.SetFlairColor(0x6); - break; - case "press-3": - p.SetFlairColor(0xe); - break; - case "press-4": - p.SetFlairColor(0xa); - break; - case "press-5": - p.SetFlairColor(0x9); - break; - case "press-6": - p.SetFlairColor(0x5); - break; - case "no-press": - p.SetFlairColor(0x7); - break; - case "cheater": - p.SetFlairColor(0x5); - break; - case "cant-press": - p.SetFlairColor(0xf); - break; - case "unknown": - if (text.equals("-1")) // If true, only non-presser/can't press; if - // false, any flair - { - try { - if (CheckForJoinDate(p)) { - p.SetFlair(0x7, "--"); - } else { - p.SetFlair(0xf, "--"); - } - } catch (Exception e) { - p.FlairState = FlairStates.Commented; // Flair unknown - p.SetFlairColor(0); - e.printStackTrace(); - } - } else { - p.FlairState = FlairStates.Commented; // Flair unknown - p.SetFlairColor(0); - } - return; - default: - return; - } - if (text.equals("-1")) - text = "--"; - p.SetFlairTime(text); - } - - public static boolean CheckForJoinDate(MaybeOfflinePlayer mp) - throws Exception { - URL url = new URL("https://www.reddit.com/u/" + mp.UserName); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - HtmlCleaner cleaner = new HtmlCleaner(); - TagNode node = cleaner.clean(in); - - node = node.getElementsByAttValue("class", "age", true, true)[0]; - node = node.getElementsByName("time", false)[0]; - String joindate = node.getAttributeByName("datetime"); - SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd"); - joindate = joindate.split("T")[0]; - Date date = parserSDF.parse(joindate); - return date.before(new Calendar.Builder() - .setTimeZone(TimeZone.getTimeZone("UTC")).setDate(2015, 4, 1) - .build().getTime()); - } - - public static void ConfirmUserMessage(MaybeOfflinePlayer mp) { - Player p = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented) && p != null) - if (mp.UserNames.size() > 1) - p.sendMessage("§9Multiple Reddit users commented your name. You can select with /u accept.§r §6Type /u accept or /u ignore§r"); - else - p.sendMessage("§9A Reddit user commented your name. Is that you?§r §6Type /u accept or /u ignore§r"); - } - - public static Collection GetPlayers() { - return Instance.getServer().getOnlinePlayers(); - } - - public static ArrayList AnnounceMessages = new ArrayList<>(); - public static int AnnounceTime = 15 * 60 * 1000; - - public static void LoadFiles(boolean reload) { - if (reload) { - System.out - .println("The Button Minecraft plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - AnnounceMessages.clear(); - } - System.out.println("Loading files for The Button Minecraft plugin..."); - try { - File file = new File("announcemessages.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsaccepted.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsignored.txt"); - if (file.exists()) - file.delete(); - file = new File("thebuttonmc.yml"); - if (file.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - yc.load(file); - MaybeOfflinePlayer.Load(yc); - PlayerListener.NotificationSound = yc - .getString("notificationsound"); - PlayerListener.NotificationPitch = yc - .getDouble("notificationpitch"); - AnnounceTime = yc.getInt("announcetime"); - AnnounceMessages.addAll(yc.getStringList("announcements")); - } - System.out.println("The Button Minecraft plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } catch (InvalidConfigurationException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - public static void SaveFiles() { - System.out.println("Saving files for The Button Minecraft plugin..."); - try { - File file = new File("thebuttonmc.yml"); - YamlConfiguration yc = new YamlConfiguration(); - MaybeOfflinePlayer.Save(yc); - yc.set("notificationsound", PlayerListener.NotificationSound); - yc.set("notificationpitch", PlayerListener.NotificationPitch); - yc.set("announcetime", AnnounceTime); - yc.set("announcements", AnnounceMessages); - yc.save(file); - System.out.println("The Button Minecraft plugin saved files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - private void addClassPath(final URL url) throws IOException { - final URLClassLoader sysloader = (URLClassLoader) ClassLoader - .getSystemClassLoader(); - final Class sysclass = URLClassLoader.class; - try { - final Method method = sysclass.getDeclaredMethod("addURL", - new Class[] { URL.class }); - method.setAccessible(true); - method.invoke(sysloader, new Object[] { url }); - } catch (final Throwable t) { - t.printStackTrace(); - throw new IOException("Error adding " + url - + " to system classloader"); - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/53/202e6b364ba600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/53/202e6b364ba600151c15ab42d7919fee deleted file mode 100644 index f8a30d7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/53/202e6b364ba600151c15ab42d7919fee +++ /dev/null @@ -1,603 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Lastlol: " + Lastlol); - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/53/40b494f5e540001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/53/40b494f5e540001514c09dece48b36c7 deleted file mode 100644 index d9ec7da..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/53/40b494f5e540001514c09dece48b36c7 +++ /dev/null @@ -1,72 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.playSound(arg0, arg1, arg2, arg3) - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/53/d0c1dad6e440001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/53/d0c1dad6e440001514c09dece48b36c7 deleted file mode 100644 index 159e3e4..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/53/d0c1dad6e440001514c09dece48b36c7 +++ /dev/null @@ -1,296 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/55/c0fc6b25cd3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/55/c0fc6b25cd3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 6549d0e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/55/c0fc6b25cd3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,24 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.HashMap; - -public class MaybeOfflinePlayer -{ //2015.08.08. - public String PlayerName; - public String UserName; - public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not - public boolean AcceptedFlair; - public boolean IgnoredFlair; - public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. - public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) - { - if(!AllPlayers.containsKey(playername)) - { - MaybeOfflinePlayer player=new MaybeOfflinePlayer(); - player.PlayerName=playername; - AllPlayers.put(playername, player); - return player; - } - return AllPlayers.get(playername); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/56/205a1cf9d13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/56/205a1cf9d13e001518fa86d7ae2a1cf8 deleted file mode 100644 index d7286f9..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/56/205a1cf9d13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,374 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { - System.out.println("Reloading files for auto-flair plugin..."); //2015.08.09. - MaybeOfflinePlayer.AllPlayers.clear(); //2015.08.09. - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/56/f06dfb95d8a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/56/f06dfb95d8a500151c15ab42d7919fee deleted file mode 100644 index 37b893b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/56/f06dfb95d8a500151c15ab42d7919fee +++ /dev/null @@ -1,596 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - if(Lastlol!=null) - Lastlol.UUID - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5b/008c7edd2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/008c7edd2d53001516cdaaef55e27ba4 deleted file mode 100644 index 9a58544..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5b/008c7edd2d53001516cdaaef55e27ba4 +++ /dev/null @@ -1,16 +0,0 @@ -name: TheButtonMCPlugin -main: tk.sznp.thebuttonautoflair.PluginMain -version: 2.0 -commands: - u: - description: Auto-flair system. Accept or ignore flair. - usage: "&cUsage: /u accept|ignore|opme&r" - nrp: - description: Send message in Out-of-Character - usage: "&cUsage: /nrp &r" - ooc: - description: Send message in Out-of-Character - usage: "&cUsage: /ooc &r" -author: NorbiPeti -depend: [Essentials, Towny] -s \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0d83cf9de40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0d83cf9de40001514c09dece48b36c7 deleted file mode 100644 index 68a104f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0d83cf9de40001514c09dece48b36c7 +++ /dev/null @@ -1,297 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5c/a03b3ea1d33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/5c/a03b3ea1d33e001518fa86d7ae2a1cf8 deleted file mode 100644 index 3d0defb..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5c/a03b3ea1d33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,219 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - DoReload(); - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5d/a0a6c2d0d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/5d/a0a6c2d0d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 5d7321f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5d/a0a6c2d0d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5d/a0befd81d33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/5d/a0befd81d33e001518fa86d7ae2a1cf8 deleted file mode 100644 index 3318744..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5d/a0befd81d33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,216 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5e/c0d6d38be640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/5e/c0d6d38be640001514c09dece48b36c7 deleted file mode 100644 index cbc9ea1..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5e/c0d6d38be640001514c09dece48b36c7 +++ /dev/null @@ -1,73 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f); //2015.08.12. - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5f/2061341bd23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/5f/2061341bd23e001518fa86d7ae2a1cf8 deleted file mode 100644 index ff39b38..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5f/2061341bd23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,375 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5f/50257859e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/5f/50257859e640001514c09dece48b36c7 deleted file mode 100644 index c192f31..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5f/50257859e640001514c09dece48b36c7 +++ /dev/null @@ -1,72 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.playSound(p.getLocation(), , arg2, arg3) - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5f/c0b28923ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/5f/c0b28923ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 26a60f9..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5f/c0b28923ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,355 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - String finalflair; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6/2029114dd33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/6/2029114dd33e001518fa86d7ae2a1cf8 deleted file mode 100644 index 14132d5..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6/2029114dd33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,216 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; - p.sendMessage(msg); - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6/208a8252ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/6/208a8252ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 7477f60..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6/208a8252ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,31 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.HashMap; - -public class MaybeOfflinePlayer -{ //2015.08.08. - public String PlayerName; - public String UserName; - public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not - public boolean AcceptedFlair; - public boolean IgnoredFlair; - public FlairClassType FlairType; //2015.08.09. - public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. - public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) - { - if(!AllPlayers.containsKey(playername)) - { - MaybeOfflinePlayer player=new MaybeOfflinePlayer(); - player.PlayerName=playername; - AllPlayers.put(playername, player); - return player; - } - return AllPlayers.get(playername); - } - public enum FlairClassType - { //2015.08.09. - NonPresser, - CantPress, - Undecided - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6/a032431fd23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/6/a032431fd23e001518fa86d7ae2a1cf8 deleted file mode 100644 index b21f1ef..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6/a032431fd23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,375 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/61/b0779e98d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/61/b0779e98d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index f7dee03..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/61/b0779e98d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,205 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/63/206c2677ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/63/206c2677ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index c13bb09..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/63/206c2677ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,358 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairType=FlairClassType.Undecided; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/63/90beaa3cd8a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/63/90beaa3cd8a500151c15ab42d7919fee deleted file mode 100644 index 36790ac..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/63/90beaa3cd8a500151c15ab42d7919fee +++ /dev/null @@ -1,596 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static boolean PluginUpdated = false; // 2015.08.31. - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) - { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/63/d06551420941001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/63/d06551420941001514c09dece48b36c7 deleted file mode 100644 index e93fc19..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/63/d06551420941001514c09dece48b36c7 +++ /dev/null @@ -1,74 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - if(message.contains(p.getName())) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/64/202fdd3acd3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/64/202fdd3acd3e001518fa86d7ae2a1cf8 deleted file mode 100644 index d2a8475..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/64/202fdd3acd3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,31 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.HashMap; - -public class MaybeOfflinePlayer -{ //2015.08.08. - public String PlayerName; - public String UserName; - public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not - public boolean AcceptedFlair; - public boolean IgnoredFlair; - //public - public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. - public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) - { - if(!AllPlayers.containsKey(playername)) - { - MaybeOfflinePlayer player=new MaybeOfflinePlayer(); - player.PlayerName=playername; - AllPlayers.put(playername, player); - return player; - } - return AllPlayers.get(playername); - } - public enum FlairClassType - { - NonPresser, - CantPress, - Undecided - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/64/20a74791d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/64/20a74791d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 5a05c55..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/64/20a74791d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,205 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - return; - } - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/64/90cec71ead9e0015192daf17db672400 b/.metadata/.plugins/org.eclipse.core.resources/.history/64/90cec71ead9e0015192daf17db672400 deleted file mode 100644 index edcd38c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/64/90cec71ead9e0015192daf17db672400 +++ /dev/null @@ -1,595 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static boolean PluginUpdated = false; // 2015.08.31. - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. - { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/65/5094853442a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/65/5094853442a600151c15ab42d7919fee deleted file mode 100644 index 7e5e0ec..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/65/5094853442a600151c15ab42d7919fee +++ /dev/null @@ -1,364 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); // TODO: Quiz queue - // TODO: Flairs from Command Block The Button - Teams - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = e.getPlayer(); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/67/c0952ea8e240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/67/c0952ea8e240001514c09dece48b36c7 deleted file mode 100644 index 340df89..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/67/c0952ea8e240001514c09dece48b36c7 +++ /dev/null @@ -1,298 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message) - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6a/20a2e34ad03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/6a/20a2e34ad03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 330b73a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6a/20a2e34ad03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,201 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - s - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6a/406f8416e340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/6a/406f8416e340001514c09dece48b36c7 deleted file mode 100644 index 4f33dd3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6a/406f8416e340001514c09dece48b36c7 +++ /dev/null @@ -1,298 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6b/700669952d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/6b/700669952d53001516cdaaef55e27ba4 deleted file mode 100644 index 5b3245c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6b/700669952d53001516cdaaef55e27ba4 +++ /dev/null @@ -1,13 +0,0 @@ -name: TheButtonMCPlugin -main: tk.sznp.thebuttonautoflair.PluginMain -version: 2.0 -commands: - u: - description: Auto-flair system. Accept or ignore flair. - usage: "&cUsage: /u accept|ignore|opme&r" - nrp: - description: Send message in Out-of-Character - usage: "&cUsage: /nrp &r" - ooc: - description: Send message in Out-of-Character - usage: "&cUsage: /ooc &r" \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/20b08dced03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/20b08dced03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 0384150..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/20b08dced03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,211 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/500072fecd3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/500072fecd3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 5740654..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/500072fecd3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,351 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - String finalflair; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/506c7d4ee140001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/506c7d4ee140001514c09dece48b36c7 deleted file mode 100644 index 8742a9c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/506c7d4ee140001514c09dece48b36c7 +++ /dev/null @@ -1,71 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6e/60f4f3db2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/6e/60f4f3db2d53001516cdaaef55e27ba4 deleted file mode 100644 index f7e6157..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6e/60f4f3db2d53001516cdaaef55e27ba4 +++ /dev/null @@ -1,14 +0,0 @@ -name: TheButtonMCPlugin -main: tk.sznp.thebuttonautoflair.PluginMain -version: 2.0 -commands: - u: - description: Auto-flair system. Accept or ignore flair. - usage: "&cUsage: /u accept|ignore|opme&r" - nrp: - description: Send message in Out-of-Character - usage: "&cUsage: /nrp &r" - ooc: - description: Send message in Out-of-Character - usage: "&cUsage: /ooc &r" -author: NorbiPeti \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6e/a01e1adad13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/6e/a01e1adad13e001518fa86d7ae2a1cf8 deleted file mode 100644 index fb29d4f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6e/a01e1adad13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,373 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - if(reload) - { - MaybeOfflinePlayer.AllPlayers.clear(); //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6f/10014ab944a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/6f/10014ab944a600151c15ab42d7919fee deleted file mode 100644 index cc10ce9..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6f/10014ab944a600151c15ab42d7919fee +++ /dev/null @@ -1,90 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - public String FlairTime; - public short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6f/d0569c5ae240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/6f/d0569c5ae240001514c09dece48b36c7 deleted file mode 100644 index 5a0d8b8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6f/d0569c5ae240001514c09dece48b36c7 +++ /dev/null @@ -1,451 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - public static ConsoleSender Console; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - SaveFiles(); //2015.08.09. - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - //System.out.println("Start: "+start); - if(start==-1+"IGN:".length()) //+length: 2015.08.10. - continue; //2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - //System.out.println("End: "+end); - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - //System.out.println("IGN: "+ign); - ign = ign.trim(); - //System.out.println("Trimmed IGN: "+ign); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - /*else - flair = "non-presser";*/ - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - //return p.Flair!=null; //2015.08.08. - return p.CommentedOnReddit; //2015.08.10. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - p.FlairRecognised=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(--s)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(??s)§r"; - break; - case "unknown": - if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair - p.FlairDecided=false; - else - p.FlairRecognised=false; - finalflair=""; - break; - default: - //finalflair=""; - //break; - return; - } - /*if(finalflair.length()==0) //<-- 2015.07.20. - return;*/ - p.Flair=finalflair; //2015.08.08. - p.CommentedOnReddit=true; //2015.08.10. - p.UserName=username; //2015.08.08. - if(finalflair.length()==0) //Just for the message - finalflair="undecided"; - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - //return flair==null ? "" : flair; - return flair; //2015.08.10. - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //<-- 2015.08.10. - TownColors.put(s[0], s[1]); - } - br.close(); - } - file=new File("customflairs.txt"); //2015.08.09. - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //2015.08.10. - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); - p.Flair=s[1]; //2015.08.09. - p.CommentedOnReddit=true; //Kind of - } - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static void SaveFiles() //<-- 2015.08.09. - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static boolean RemoveLineFromFile(String file, String line) - { //2015.08.09. - File inputFile = new File(file); - File tempFile = new File("_temp.txt"); - - if(!inputFile.exists()) - return true; //2015.08.10. - - try { - BufferedReader reader = new BufferedReader(new FileReader(inputFile)); - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - - String lineToRemove = line; - String currentLine; - - while((currentLine = reader.readLine()) != null) { - // trim newline when comparing with lineToRemove - String trimmedLine = currentLine.trim(); - //if(trimmedLine.equals(lineToRemove)) continue; - if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. - writer.write(currentLine + System.getProperty("line.separator")); - } - writer.close(); - reader.close(); - if(!tempFile.renameTo(inputFile)) - { - inputFile.delete(); - return tempFile.renameTo(inputFile); - } - else - return true; - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - return false; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7/d0a7c5c8ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/7/d0a7c5c8ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 752a73d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/7/d0a7c5c8ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,361 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/71/20d5de7b4aa600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/71/20d5de7b4aa600151c15ab42d7919fee deleted file mode 100644 index 705d7bd..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/71/20d5de7b4aa600151c15ab42d7919fee +++ /dev/null @@ -1,364 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.GetFlairColor() == 0x00 ? 0xb - : mp.GetFlairColor())); // TODO: Quiz queue - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer() - .getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/71/b09765e7d13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/71/b09765e7d13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 738511a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/71/b09765e7d13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,373 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { - MaybeOfflinePlayer.AllPlayers.clear(); //2015.08.09. - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/73/b05d0d564ca600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/73/b05d0d564ca600151c15ab42d7919fee deleted file mode 100644 index 6a13bdf..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/73/b05d0d564ca600151c15ab42d7919fee +++ /dev/null @@ -1,602 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - if (Lastlol != null - && (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/75/200e61c5d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/75/200e61c5d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 03f8e7b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/75/200e61c5d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,209 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - } - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/75/20bc5301d13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/75/20bc5301d13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 7e0571a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/75/20bc5301d13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,222 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/75/407eccf8d0a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/75/407eccf8d0a500151c15ab42d7919fee deleted file mode 100644 index 9d8da54..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/75/407eccf8d0a500151c15ab42d7919fee +++ /dev/null @@ -1,89 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - public String FlairTime; - public short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/75/a0acffa2d13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/75/a0acffa2d13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 2b15b31..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/75/a0acffa2d13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,368 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) - - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/76/20df8b6f45a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/76/20df8b6f45a600151c15ab42d7919fee deleted file mode 100644 index 19558ac..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/76/20df8b6f45a600151c15ab42d7919fee +++ /dev/null @@ -1,117 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) { - FlairColor = color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p = Bukkit.getPlayer(UUID); - p.setPlayerListName(String.Format("%s%s", p.getPlayerListName(), - GetFormattedFlair())); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/76/800c9206d5a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/76/800c9206d5a500151c15ab42d7919fee deleted file mode 100644 index 7ca9b78..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/76/800c9206d5a500151c15ab42d7919fee +++ /dev/null @@ -1,370 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - /* - * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) - * .getChannelsHandler().getActiveChannel(e.getPlayer(), - * channelTypes.GLOBAL); - */ - /* - * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( - * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if - * (modes.size() == 0 || modes.contains("g")) { - */ - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/76/b054e00b4aa600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/76/b054e00b4aa600151c15ab42d7919fee deleted file mode 100644 index de7ab67..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/76/b054e00b4aa600151c15ab42d7919fee +++ /dev/null @@ -1,603 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/77/10dec4cbce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/77/10dec4cbce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 5908a1d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/77/10dec4cbce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,360 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/78/a0991cb7d13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/78/a0991cb7d13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 2a4b609..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/78/a0991cb7d13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,370 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) - { - if(reload) - MaybeOfflinePlayer.AllPlayers.clear(); - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/78/c0c9ec2dd8a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/78/c0c9ec2dd8a500151c15ab42d7919fee deleted file mode 100644 index 1205b00..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/78/c0c9ec2dd8a500151c15ab42d7919fee +++ /dev/null @@ -1,595 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static boolean PluginUpdated = false; // 2015.08.31. - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) - { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7c/3014764dcd3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/7c/3014764dcd3e001518fa86d7ae2a1cf8 deleted file mode 100644 index c8a5a26..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/7c/3014764dcd3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,31 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.HashMap; - -public class MaybeOfflinePlayer -{ //2015.08.08. - public String PlayerName; - public String UserName; - public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not - public boolean AcceptedFlair; - public boolean IgnoredFlair; - //public - public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. - public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) - { - if(!AllPlayers.containsKey(playername)) - { - MaybeOfflinePlayer player=new MaybeOfflinePlayer(); - player.PlayerName=playername; - AllPlayers.put(playername, player); - return player; - } - return AllPlayers.get(playername); - } - public enum FlairClassType - { //2015.08.09. - NonPresser, - CantPress, - Undecided - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7c/a0934f14cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/7c/a0934f14cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index ad8a270..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/7c/a0934f14cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,362 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7d/a005617fd13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/7d/a005617fd13e001518fa86d7ae2a1cf8 deleted file mode 100644 index dbcf375..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/7d/a005617fd13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,363 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/80/2077802d4ba600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/80/2077802d4ba600151c15ab42d7919fee deleted file mode 100644 index 706d6e4..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/80/2077802d4ba600151c15ab42d7919fee +++ /dev/null @@ -1,603 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Lastlol: "+Lastlol); - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/80/4075d399d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/80/4075d399d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 8abed8b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/80/4075d399d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,206 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/81/b0e3d39bd13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/81/b0e3d39bd13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 81f3985..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/81/b0e3d39bd13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,326 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) - { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/82/201f90d5d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/82/201f90d5d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 0384150..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/82/201f90d5d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,211 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/82/704f84a1d8a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/82/704f84a1d8a500151c15ab42d7919fee deleted file mode 100644 index 560d320..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/82/704f84a1d8a500151c15ab42d7919fee +++ /dev/null @@ -1,596 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - if(Lastlol!=null || Bukkit.getPlayer(Lastlol.UUID)) - Lastlol.UUID - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/83/20a1e315cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/83/20a1e315cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 72f8cf3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/83/20a1e315cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,362 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/84/a0c00f13cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/84/a0c00f13cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 999a5ae..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/84/a0c00f13cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,362 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) - { - - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/85/401c3763e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/85/401c3763e640001514c09dece48b36c7 deleted file mode 100644 index ee7ab82..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/85/401c3763e640001514c09dece48b36c7 +++ /dev/null @@ -1,73 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0, arg3) - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/86/b01dd91a4ca600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/86/b01dd91a4ca600151c15ab42d7919fee deleted file mode 100644 index 405e62a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/86/b01dd91a4ca600151c15ab42d7919fee +++ /dev/null @@ -1,605 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - System.out.println("Unlol command."); - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Lastlol: " + Lastlol); - System.out.println("Player: " + Bukkit.getPlayer(Lastlol.UUID)); - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/87/30ab730244a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/87/30ab730244a600151c15ab42d7919fee deleted file mode 100644 index d35b442..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/87/30ab730244a600151c15ab42d7919fee +++ /dev/null @@ -1,366 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); // TODO: Quiz queue - // TODO: Flairs from Command Block The Button - Teams - PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams() - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer() - .getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8c/a0ea662dcf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/8c/a0ea662dcf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 1213563..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/8c/a0ea662dcf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,362 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8d/b08d79a849a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/8d/b08d79a849a600151c15ab42d7919fee deleted file mode 100644 index e3db2c7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/8d/b08d79a849a600151c15ab42d7919fee +++ /dev/null @@ -1,125 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(int color) { - FlairColor = (short)color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p = Bukkit.getPlayer(UUID); - p.setPlayerListName(String.format("%s%s", p.getPlayerListName(), - GetFormattedFlair())); - } - - public short GetFlairColor() { - return FlairColor; - } - - public String GetFlairTime() { - return FlairTime; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8e/80598e6842a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/8e/80598e6842a600151c15ab42d7919fee deleted file mode 100644 index f66decd..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/8e/80598e6842a600151c15ab42d7919fee +++ /dev/null @@ -1,604 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/91/c01c0d9ecf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/91/c01c0d9ecf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index a085586..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/91/c01c0d9ecf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,71 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.Flair!=null) - PluginMain.AppendPlayerDisplayFlair(p, mp.UserName, mp.Flair); - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(flair==null || !player.AcceptedFlair) - flair=""; //2015.08.08. - String message=event.getMessage(); //2015.08.08. - /*for(Player p : PluginMain.GetPlayers()) - { //2015.08.08. - message.replaceAll(p.getName(), ) - }*/ - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/93/10f3fc0acf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/93/10f3fc0acf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index a62c891..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/93/10f3fc0acf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,361 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/93/d0f07864d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/93/d0f07864d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index f15dd12..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/93/d0f07864d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,376 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/94/2033b6d6d13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/94/2033b6d6d13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 6ac02e4..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/94/2033b6d6d13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,373 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - System.out.println("Loading files for auto-flair plugin..."); - if(reload) - { - MaybeOfflinePlayer.AllPlayers.clear(); //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/96/20ba5e09d43e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/96/20ba5e09d43e001518fa86d7ae2a1cf8 deleted file mode 100644 index 6a40e1a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/96/20ba5e09d43e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,219 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done."); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - DoReload(player); //2015.08.09. - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/97/20ad60e0d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/97/20ad60e0d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 4c2bf02..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/97/20ad60e0d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,211 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="" - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/97/a0aae0bdd23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/97/a0aae0bdd23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 229de7d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/97/a0aae0bdd23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,223 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/97/c037f44de440001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/97/c037f44de440001514c09dece48b36c7 deleted file mode 100644 index 5c4b806..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/97/c037f44de440001514c09dece48b36c7 +++ /dev/null @@ -1,296 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player)s - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/97/c0e2ad6fce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/97/c0e2ad6fce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 28be51a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/97/c0e2ad6fce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,357 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairType=FlairClassType.Undecided; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/97/f0a3a5f1de40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/97/f0a3a5f1de40001514c09dece48b36c7 deleted file mode 100644 index a5817c9..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/97/f0a3a5f1de40001514c09dece48b36c7 +++ /dev/null @@ -1,297 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/98/201af098d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/98/201af098d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index f7dee03..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/98/201af098d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,205 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/98/20ac1ac949a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/98/20ac1ac949a600151c15ab42d7919fee deleted file mode 100644 index 22c2c98..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/98/20ac1ac949a600151c15ab42d7919fee +++ /dev/null @@ -1,125 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(int color) { - FlairColor = (short) color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p = Bukkit.getPlayer(UUID); - p.setPlayerListName(String.format("%s%s", p.getPlayerListName(), - GetFormattedFlair())); - } - - public short GetFlairColor() { - return FlairColor; - } - - public String GetFlairTime() { - return FlairTime; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9a/90dce6d5ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/9a/90dce6d5ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index f48f1b4..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/9a/90dce6d5ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,361 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9a/a0aebdacd03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/9a/a0aebdacd03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 8abed8b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/9a/a0aebdacd03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,206 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9a/e08e32dd2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/9a/e08e32dd2d53001516cdaaef55e27ba4 deleted file mode 100644 index 9626fec..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/9a/e08e32dd2d53001516cdaaef55e27ba4 +++ /dev/null @@ -1,15 +0,0 @@ -name: TheButtonMCPlugin -main: tk.sznp.thebuttonautoflair.PluginMain -version: 2.0 -commands: - u: - description: Auto-flair system. Accept or ignore flair. - usage: "&cUsage: /u accept|ignore|opme&r" - nrp: - description: Send message in Out-of-Character - usage: "&cUsage: /nrp &r" - ooc: - description: Send message in Out-of-Character - usage: "&cUsage: /ooc &r" -author: NorbiPeti -depend: [Essentials, Towny] diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9c/30bb8899d13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/9c/30bb8899d13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 2e695ac..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/9c/30bb8899d13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,326 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - Load(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) - { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9c/30e075274ca600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/9c/30e075274ca600151c15ab42d7919fee deleted file mode 100644 index 0648957..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/9c/30e075274ca600151c15ab42d7919fee +++ /dev/null @@ -1,604 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Lastlol: " + Lastlol); - System.out.println("Player: " + Bukkit.getPlayer(Lastlol.UUID)); - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9d/60a4c73b42a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/9d/60a4c73b42a600151c15ab42d7919fee deleted file mode 100644 index 016285c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/9d/60a4c73b42a600151c15ab42d7919fee +++ /dev/null @@ -1,604 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - Player p = null; - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a0/30b1eb2c4ba600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/a0/30b1eb2c4ba600151c15ab42d7919fee deleted file mode 100644 index 8c52539..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a0/30b1eb2c4ba600151c15ab42d7919fee +++ /dev/null @@ -1,602 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/1035b42cd23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/a1/1035b42cd23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 3051444..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/1035b42cd23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,376 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/40b13fdfb94400151637bde96975c236 b/.metadata/.plugins/org.eclipse.core.resources/.history/a1/40b13fdfb94400151637bde96975c236 deleted file mode 100644 index b71fce5..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/40b13fdfb94400151637bde96975c236 +++ /dev/null @@ -1,7 +0,0 @@ -name: TheButtonMCPlugin -main: tk.sznp.thebuttonautoflair.PluginMain -version: 2.0 -commands: - u: - description: Auto-flair system and others, like name mentioning - usage: "&cUsage: /u accept|ignore|opme&r" diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/a05e6526d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/a1/a05e6526d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 7d30f89..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/a05e6526d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,375 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/b06db16849a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/a1/b06db16849a600151c15ab42d7919fee deleted file mode 100644 index dd1e99c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/b06db16849a600151c15ab42d7919fee +++ /dev/null @@ -1,117 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) { - FlairColor = color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p = Bukkit.getPlayer(UUID); - p.setPlayerListName(String.format("%s%s", p.getPlayerListName(), - GetFormattedFlair())); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a2/206c0ba2d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/a2/206c0ba2d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 23364ef..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a2/206c0ba2d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,222 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a2/20ecb1f0d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/a2/20ecb1f0d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 41fefc9..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a2/20ecb1f0d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,211 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a3/b08191454ba600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/a3/b08191454ba600151c15ab42d7919fee deleted file mode 100644 index 4d2b5cb..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a3/b08191454ba600151c15ab42d7919fee +++ /dev/null @@ -1,604 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Lastlol: " + Lastlol); - System.out.println("Player: " + Bukkit.getPlayer(Lastlol.UUID))); - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a4/a0f428a3d33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/a4/a0f428a3d33e001518fa86d7ae2a1cf8 deleted file mode 100644 index 72b38bc..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a4/a0f428a3d33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,219 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - DoReload(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a5/102ab363e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/a5/102ab363e640001514c09dece48b36c7 deleted file mode 100644 index 06ce0fb..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a5/102ab363e640001514c09dece48b36c7 +++ /dev/null @@ -1,73 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0, 1.0) - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a8/4016faaee240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/a8/4016faaee240001514c09dece48b36c7 deleted file mode 100644 index f1e321a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a8/4016faaee240001514c09dece48b36c7 +++ /dev/null @@ -1,299 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/aa/a076f09ad33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/aa/a076f09ad33e001518fa86d7ae2a1cf8 deleted file mode 100644 index cb3725d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/aa/a076f09ad33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,218 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ab/c07bf623e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/c07bf623e640001514c09dece48b36c7 deleted file mode 100644 index 7c5cf6b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ab/c07bf623e640001514c09dece48b36c7 +++ /dev/null @@ -1,72 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.playSound(p.getLocation(), arg1, arg2, arg3) - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ab/c0cfe25644a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/c0cfe25644a600151c15ab42d7919fee deleted file mode 100644 index e510459..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ab/c0cfe25644a600151c15ab42d7919fee +++ /dev/null @@ -1,367 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); // TODO: Quiz queue - // TODO: Flairs from Command Block The Button - Teams - for(int i=0; i<=60; i++) - PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer() - .getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ac/50a4ecaae240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ac/50a4ecaae240001514c09dece48b36c7 deleted file mode 100644 index e8643bd..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ac/50a4ecaae240001514c09dece48b36c7 +++ /dev/null @@ -1,298 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/60b39408d43e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/ad/60b39408d43e001518fa86d7ae2a1cf8 deleted file mode 100644 index 05f66ff..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/60b39408d43e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,220 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done."); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - DoReload(player); //2015.08.09. - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/b067a2dd2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/ad/b067a2dd2d53001516cdaaef55e27ba4 deleted file mode 100644 index 9626fec..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/b067a2dd2d53001516cdaaef55e27ba4 +++ /dev/null @@ -1,15 +0,0 @@ -name: TheButtonMCPlugin -main: tk.sznp.thebuttonautoflair.PluginMain -version: 2.0 -commands: - u: - description: Auto-flair system. Accept or ignore flair. - usage: "&cUsage: /u accept|ignore|opme&r" - nrp: - description: Send message in Out-of-Character - usage: "&cUsage: /nrp &r" - ooc: - description: Send message in Out-of-Character - usage: "&cUsage: /ooc &r" -author: NorbiPeti -depend: [Essentials, Towny] diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/c0954ebcce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/ad/c0954ebcce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 2284d68..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/c0954ebcce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,361 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/e01e43fdde40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ad/e01e43fdde40001514c09dece48b36c7 deleted file mode 100644 index 9bf1e2e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/e01e43fdde40001514c09dece48b36c7 +++ /dev/null @@ -1,297 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ae/00c863dc41a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/ae/00c863dc41a600151c15ab42d7919fee deleted file mode 100644 index 5810a0c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ae/00c863dc41a600151c15ab42d7919fee +++ /dev/null @@ -1,603 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - Player p = null; - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ae/1023a9f9cc3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/ae/1023a9f9cc3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 21abae7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ae/1023a9f9cc3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,194 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ae/d01c7740e340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ae/d01c7740e340001514c09dece48b36c7 deleted file mode 100644 index 233a816..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ae/d01c7740e340001514c09dece48b36c7 +++ /dev/null @@ -1,295 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin..."); - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b/301da326cd3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/b/301da326cd3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 3d05e25..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b/301da326cd3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,25 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.HashMap; - -public class MaybeOfflinePlayer -{ //2015.08.08. - public String PlayerName; - public String UserName; - public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not - public boolean AcceptedFlair; - public boolean IgnoredFlair; - public - public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. - public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) - { - if(!AllPlayers.containsKey(playername)) - { - MaybeOfflinePlayer player=new MaybeOfflinePlayer(); - player.PlayerName=playername; - AllPlayers.put(playername, player); - return player; - } - return AllPlayers.get(playername); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b1/20248930cd3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/b1/20248930cd3e001518fa86d7ae2a1cf8 deleted file mode 100644 index a73501d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b1/20248930cd3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,25 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.HashMap; - -public class MaybeOfflinePlayer -{ //2015.08.08. - public String PlayerName; - public String UserName; - public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not - public boolean AcceptedFlair; - public boolean IgnoredFlair; - //public - public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. - public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) - { - if(!AllPlayers.containsKey(playername)) - { - MaybeOfflinePlayer player=new MaybeOfflinePlayer(); - player.PlayerName=playername; - AllPlayers.put(playername, player); - return player; - } - return AllPlayers.get(playername); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b1/30440676d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/b1/30440676d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index c6af7c6..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b1/30440676d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,201 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/100a9853d43e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/100a9853d43e001518fa86d7ae2a1cf8 deleted file mode 100644 index 9a2577a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/100a9853d43e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,224 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - if(ReloadPlayer.equals(player)) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/309b60224ca600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/309b60224ca600151c15ab42d7919fee deleted file mode 100644 index 0648957..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/309b60224ca600151c15ab42d7919fee +++ /dev/null @@ -1,604 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Lastlol: " + Lastlol); - System.out.println("Player: " + Bukkit.getPlayer(Lastlol.UUID)); - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/a04fb97a44a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/a04fb97a44a600151c15ab42d7919fee deleted file mode 100644 index 25e3bf6..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/a04fb97a44a600151c15ab42d7919fee +++ /dev/null @@ -1,364 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); // TODO: Quiz queue - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer() - .getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/c04f9e03ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/c04f9e03ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 68717ab..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/c04f9e03ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,354 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - String finalflair; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided":; //2015.08.09. - finalflair="" - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/f0d62592e540001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/f0d62592e540001514c09dece48b36c7 deleted file mode 100644 index 1ac0551..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/f0d62592e540001514c09dece48b36c7 +++ /dev/null @@ -1,72 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.sendMessage() - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b5/00f67dc54ca600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/b5/00f67dc54ca600151c15ab42d7919fee deleted file mode 100644 index 21e1a87..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b5/00f67dc54ca600151c15ab42d7919fee +++ /dev/null @@ -1,602 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - if (Lastlol != null - && (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, true, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b5/202ce194d13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/b5/202ce194d13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 2e695ac..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b5/202ce194d13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,326 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - Load(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) - { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b5/20cff1fb49a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/b5/20cff1fb49a600151c15ab42d7919fee deleted file mode 100644 index 1ece9ce..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b5/20cff1fb49a600151c15ab42d7919fee +++ /dev/null @@ -1,604 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b5/40ecd766ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/b5/40ecd766ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 39e5134..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b5/40ecd766ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,31 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.HashMap; - -public class MaybeOfflinePlayer -{ //2015.08.08. - public String PlayerName; - public String UserName; - public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not - public boolean AcceptedFlair; - public boolean IgnoredFlair; - public boolean FlairSet; //2015.08.09. - public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. - public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) - { - if(!AllPlayers.containsKey(playername)) - { - MaybeOfflinePlayer player=new MaybeOfflinePlayer(); - player.PlayerName=playername; - AllPlayers.put(playername, player); - return player; - } - return AllPlayers.get(playername); - } - /*public enum FlairClassType - { //2015.08.09. - NonPresser, - CantPress, - Undecided - }*/ -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b5/b00008cc4ca600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/b5/b00008cc4ca600151c15ab42d7919fee deleted file mode 100644 index 0516444..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b5/b00008cc4ca600151c15ab42d7919fee +++ /dev/null @@ -1,602 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - if (Lastlol != null - && (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10 * 20, 5, true, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b6/20667af5cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/20667af5cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index eab3194..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b6/20667af5cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,197 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b6/20b982994aa600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/20b982994aa600151c15ab42d7919fee deleted file mode 100644 index 0e44c25..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b6/20b982994aa600151c15ab42d7919fee +++ /dev/null @@ -1,366 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - - mp.SetFlairColor(mp.GetFlairColor()); - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.GetFlairColor() == 0x00 ? 0xb - : mp.GetFlairColor())); // TODO: Quiz queue - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer() - .getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/20f6378ed03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/b7/20f6378ed03e001518fa86d7ae2a1cf8 deleted file mode 100644 index d6e50b3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/20f6378ed03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,204 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - } - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/80013692d8a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/b7/80013692d8a500151c15ab42d7919fee deleted file mode 100644 index e2bd812..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/80013692d8a500151c15ab42d7919fee +++ /dev/null @@ -1,595 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/b0476c2b4ca600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/b7/b0476c2b4ca600151c15ab42d7919fee deleted file mode 100644 index 7aaa8dd..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/b0476c2b4ca600151c15ab42d7919fee +++ /dev/null @@ -1,603 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Player: " + Bukkit.getPlayer(Lastlol.UUID)); - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/b048b351cd3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/b7/b048b351cd3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 4b9e4c5..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/b048b351cd3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,31 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.HashMap; - -public class MaybeOfflinePlayer -{ //2015.08.08. - public String PlayerName; - public String UserName; - public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not - public boolean AcceptedFlair; - public boolean IgnoredFlair; - public FlairClassType FlairType; - public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. - public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) - { - if(!AllPlayers.containsKey(playername)) - { - MaybeOfflinePlayer player=new MaybeOfflinePlayer(); - player.PlayerName=playername; - AllPlayers.put(playername, player); - return player; - } - return AllPlayers.get(playername); - } - public enum FlairClassType - { //2015.08.09. - NonPresser, - CantPress, - Undecided - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b8/b0ca9a4a49a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/b8/b0ca9a4a49a600151c15ab42d7919fee deleted file mode 100644 index f66decd..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b8/b0ca9a4a49a600151c15ab42d7919fee +++ /dev/null @@ -1,604 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b9/c0ad8e3ee340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b9/c0ad8e3ee340001514c09dece48b36c7 deleted file mode 100644 index 04a669a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b9/c0ad8e3ee340001514c09dece48b36c7 +++ /dev/null @@ -1,294 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bb/708754aee240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/708754aee240001514c09dece48b36c7 deleted file mode 100644 index 4f33dd3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/bb/708754aee240001514c09dece48b36c7 +++ /dev/null @@ -1,298 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bc/30916f57cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/bc/30916f57cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 262b029..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/bc/30916f57cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,362 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bc/a0204038ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/bc/a0204038ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index d838749..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/bc/a0204038ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,355 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bc/a099c9afd13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/bc/a099c9afd13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 3926be9..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/bc/a099c9afd13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,368 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) - { - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bd/301fea5849a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/bd/301fea5849a600151c15ab42d7919fee deleted file mode 100644 index 25e3bf6..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/bd/301fea5849a600151c15ab42d7919fee +++ /dev/null @@ -1,364 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); // TODO: Quiz queue - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer() - .getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a056849fd33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a056849fd33e001518fa86d7ae2a1cf8 deleted file mode 100644 index ef4123d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a056849fd33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,219 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - case "confirm": - - break; - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0d1b862cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0d1b862cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 0fdd3aa..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0d1b862cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,364 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press?§r"); //2015.08.09. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bf/b097a02e4ca600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/bf/b097a02e4ca600151c15ab42d7919fee deleted file mode 100644 index 1330a76..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/bf/b097a02e4ca600151c15ab42d7919fee +++ /dev/null @@ -1,603 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Player: " + Bukkit.getPlayer(Lastlol.UUID)); - if (Lastlol != null - && (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bf/b0a27d3d4ba600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/bf/b0a27d3d4ba600151c15ab42d7919fee deleted file mode 100644 index a0f7085..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/bf/b0a27d3d4ba600151c15ab42d7919fee +++ /dev/null @@ -1,604 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Lastlol: " + Lastlol); - System.out.println("Lastlol: " + Lastlol); - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c/b06ccd99ce3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/c/b06ccd99ce3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 4e85b74..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c/b06ccd99ce3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,358 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - { - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(player.getName()).AcceptedFlair) - AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - public static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c2/20d96d9ad33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/c2/20d96d9ad33e001518fa86d7ae2a1cf8 deleted file mode 100644 index 843f877..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c2/20d96d9ad33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,216 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - //String msg="§6Reloaded config file.§r"; - //SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c3/40771d08e740001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/c3/40771d08e740001514c09dece48b36c7 deleted file mode 100644 index 152043a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c3/40771d08e740001514c09dece48b36c7 +++ /dev/null @@ -1,74 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - if(message.contains(p.getName())) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f); //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c4/b016f69349a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/b016f69349a600151c15ab42d7919fee deleted file mode 100644 index 7d0ffa7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c4/b016f69349a600151c15ab42d7919fee +++ /dev/null @@ -1,355 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.IOUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.htmlcleaner.HtmlCleaner; -import org.htmlcleaner.TagNode; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.*; -import java.lang.String; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.URLConnection; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.TimeZone; - -public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. - // A user, which flair isn't obtainable: - // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - public static PluginMain Instance; - public static ConsoleCommandSender Console; // 2015.08.12. - - // Fired when plugin is first enabled - @Override - public void onEnable() { - try { - System.out.println("Extracting necessary libraries..."); - final File[] libs = new File[] { new File(getDataFolder(), - "htmlcleaner-2.16.jar") }; - for (final File lib : libs) { - if (!lib.exists()) { - JarUtils.extractFromJar(lib.getName(), - lib.getAbsolutePath()); - } - } - for (final File lib : libs) { - if (!lib.exists()) { - getLogger().warning( - "Failed to load plugin! Could not find lib: " - + lib.getName()); - Bukkit.getServer().getPluginManager().disablePlugin(this); - return; - } - addClassPath(JarUtils.getJarUrl(lib)); - } - } catch (final Exception e) { - e.printStackTrace(); - } - - getServer().getPluginManager().registerEvents(new PlayerListener(), - this); - Commands comm = new Commands(); - this.getCommand("u").setExecutor(comm); - this.getCommand("u").setUsage( - this.getCommand("u").getUsage().replace('&', '§')); - this.getCommand("nrp").setExecutor(comm); - this.getCommand("nrp").setUsage( - this.getCommand("nrp").getUsage().replace('&', '§')); - this.getCommand("ooc").setExecutor(comm); - this.getCommand("ooc").setUsage( - this.getCommand("ooc").getUsage().replace('&', '§')); - Instance = this; // 2015.08.08. - Console = this.getServer().getConsoleSender(); // 2015.08.12. - LoadFiles(false); // 2015.08.09. - Runnable r = new Runnable() { - public void run() { - ThreadMethod(); - } - }; - Thread t = new Thread(r); - t.start(); - r = new Runnable() { - public void run() { - AnnouncerThread.Run(); - } - }; - t = new Thread(r); - t.start(); - } - - public Boolean stop = false; - - // Fired when plugin is disabled - @Override - public void onDisable() { - SaveFiles(); // 2015.08.09. - stop = true; - } - - private void ThreadMethod() { - while (!stop) { - try { - String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json = new JSONArray(body).getJSONObject(1) - .getJSONObject("data").getJSONArray("children"); - for (Object obj : json) { - JSONObject item = (JSONObject) obj; - String author = item.getJSONObject("data").getString( - "author"); - String ign = item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - if (start == -1 + "IGN:".length()) // +length: 2015.08.10. - continue; // 2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end = ign.indexOf('\n', start); // 2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); - if (mp == null) - continue; - if (!mp.UserNames.contains(author)) - mp.UserNames.add(author); - if (mp.FlairState.equals(FlairStates.NoComment)) { - mp.FlairState = FlairStates.Commented; - ConfirmUserMessage(mp); - } - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } - try { - Thread.sleep(10000); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } catch (Exception e) { - // System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - } - - public void DownloadFlair(MaybeOfflinePlayer mp) - throws MalformedURLException, IOException { - String[] flairdata = DownloadString( - "http://karmadecay.com/thebutton-data.php?users=" + mp.UserName) - .replace("\"", "").split(":"); - String flair; - if (flairdata.length > 1) - flair = flairdata[1]; - else - flair = ""; - String flairclass; - if (flairdata.length > 2) - flairclass = flairdata[2]; - else - flairclass = "unknown"; - SetFlair(mp, flair, flairclass, mp.UserName); - } - - public static Exception LastException; // 2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, - IOException { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - private void SetFlair(MaybeOfflinePlayer p, String text, String flairclass, - String username) { - p.UserName = username; - p.FlairState = FlairStates.Recognised; - switch (flairclass) { - case "press-1": - p.SetFlairColor(0xc); - break; - case "press-2": - p.FlairColor = 0x6; - break; - case "press-3": - p.FlairColor = 0xe; - break; - case "press-4": - p.FlairColor = 0xa; - break; - case "press-5": - p.FlairColor = 0x9; - break; - case "press-6": - p.FlairColor = 0x5; - break; - case "no-press": - p.FlairColor = 0x7; - break; - case "cheater": - p.FlairColor = 0x5; - break; - case "cant-press": - p.FlairColor = 0xf; - break; - case "unknown": - if (text.equals("-1")) // If true, only non-presser/can't press; if - // false, any flair - { - try { - if (CheckForJoinDate(p)) { - p.FlairColor = 0x7; - p.FlairTime = "--"; - } else { - p.FlairColor = 0xf; - p.FlairTime = "--"; - } - } catch (Exception e) { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - e.printStackTrace(); - } - } else { - p.FlairState = FlairStates.Commented; // Flair unknown - p.FlairColor = 0; - } - return; - default: - return; - } - if (text.equals("-1")) - text = "--"; - p.FlairTime = text; - } - - public static boolean CheckForJoinDate(MaybeOfflinePlayer mp) - throws Exception { - URL url = new URL("https://www.reddit.com/u/" + mp.UserName); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - HtmlCleaner cleaner = new HtmlCleaner(); - TagNode node = cleaner.clean(in); - - node = node.getElementsByAttValue("class", "age", true, true)[0]; - node = node.getElementsByName("time", false)[0]; - String joindate = node.getAttributeByName("datetime"); - SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd"); - joindate = joindate.split("T")[0]; - Date date = parserSDF.parse(joindate); - return date.before(new Calendar.Builder() - .setTimeZone(TimeZone.getTimeZone("UTC")).setDate(2015, 4, 1) - .build().getTime()); - } - - public static void ConfirmUserMessage(MaybeOfflinePlayer mp) { - Player p = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented) && p != null) - if (mp.UserNames.size() > 1) - p.sendMessage("§9Multiple Reddit users commented your name. You can select with /u accept.§r §6Type /u accept or /u ignore§r"); - else - p.sendMessage("§9A Reddit user commented your name. Is that you?§r §6Type /u accept or /u ignore§r"); - } - - public static Collection GetPlayers() { - return Instance.getServer().getOnlinePlayers(); - } - - public static ArrayList AnnounceMessages = new ArrayList<>(); - public static int AnnounceTime = 15 * 60 * 1000; - - public static void LoadFiles(boolean reload) { - if (reload) { - System.out - .println("The Button Minecraft plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - AnnounceMessages.clear(); - } - System.out.println("Loading files for The Button Minecraft plugin..."); - try { - File file = new File("announcemessages.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsaccepted.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsignored.txt"); - if (file.exists()) - file.delete(); - file = new File("thebuttonmc.yml"); - if (file.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - yc.load(file); - MaybeOfflinePlayer.Load(yc); - PlayerListener.NotificationSound = yc - .getString("notificationsound"); - PlayerListener.NotificationPitch = yc - .getDouble("notificationpitch"); - AnnounceTime = yc.getInt("announcetime"); - AnnounceMessages.addAll(yc.getStringList("announcements")); - } - System.out.println("The Button Minecraft plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } catch (InvalidConfigurationException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - public static void SaveFiles() { - System.out.println("Saving files for The Button Minecraft plugin..."); - try { - File file = new File("thebuttonmc.yml"); - YamlConfiguration yc = new YamlConfiguration(); - MaybeOfflinePlayer.Save(yc); - yc.set("notificationsound", PlayerListener.NotificationSound); - yc.set("notificationpitch", PlayerListener.NotificationPitch); - yc.set("announcetime", AnnounceTime); - yc.set("announcements", AnnounceMessages); - yc.save(file); - System.out.println("The Button Minecraft plugin saved files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - private void addClassPath(final URL url) throws IOException { - final URLClassLoader sysloader = (URLClassLoader) ClassLoader - .getSystemClassLoader(); - final Class sysclass = URLClassLoader.class; - try { - final Method method = sysclass.getDeclaredMethod("addURL", - new Class[] { URL.class }); - method.setAccessible(true); - method.invoke(sysloader, new Object[] { url }); - } catch (final Throwable t) { - t.printStackTrace(); - throw new IOException("Error adding " + url - + " to system classloader"); - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c5/30315643d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/c5/30315643d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index a8dea0e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c5/30315643d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,198 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c5/a03d9d1145a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/c5/a03d9d1145a600151c15ab42d7919fee deleted file mode 100644 index 201a69c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c5/a03d9d1145a600151c15ab42d7919fee +++ /dev/null @@ -1,109 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) { - FlairColor = color; - } - - public void SetFlairTime(String time) { - FlairTime = time; - } - - public void SetFlair(short color, String time) { - - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - event.getPlayer().setPlayerListName(""); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ca/60051534d8a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/ca/60051534d8a500151c15ab42d7919fee deleted file mode 100644 index 36790ac..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ca/60051534d8a500151c15ab42d7919fee +++ /dev/null @@ -1,596 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static boolean PluginUpdated = false; // 2015.08.31. - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) - { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/cc/b08607c4d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/cc/b08607c4d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 5d7321f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/cc/b08607c4d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/cd/90837b3cd23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/cd/90837b3cd23e001518fa86d7ae2a1cf8 deleted file mode 100644 index e95109b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/cd/90837b3cd23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,377 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d/40ebea47e340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d/40ebea47e340001514c09dece48b36c7 deleted file mode 100644 index c4760e2..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d/40ebea47e340001514c09dece48b36c7 +++ /dev/null @@ -1,296 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/405b2dafe240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/405b2dafe240001514c09dece48b36c7 deleted file mode 100644 index 4f33dd3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/405b2dafe240001514c09dece48b36c7 +++ /dev/null @@ -1,298 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/d0f74b8de640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/d0f74b8de640001514c09dece48b36c7 deleted file mode 100644 index cbc9ea1..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/d0f74b8de640001514c09dece48b36c7 +++ /dev/null @@ -1,73 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f); //2015.08.12. - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/f0f48766e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/f0f48766e640001514c09dece48b36c7 deleted file mode 100644 index 89930f8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/f0f48766e640001514c09dece48b36c7 +++ /dev/null @@ -1,73 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0, 1.0); - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d2/204ad69bd03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/d2/204ad69bd03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 331b6b5..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d2/204ad69bd03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,206 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - w - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d2/505b5f5e45a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/d2/505b5f5e45a600151c15ab42d7919fee deleted file mode 100644 index 27ffbef..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d2/505b5f5e45a600151c15ab42d7919fee +++ /dev/null @@ -1,115 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) { - FlairColor = color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p=Bukkit.getPlayer(UUID); - p.setPlayerListName(String.Format("%s%s", )); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d2/50685e70e240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d2/50685e70e240001514c09dece48b36c7 deleted file mode 100644 index a8534f3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d2/50685e70e240001514c09dece48b36c7 +++ /dev/null @@ -1,453 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - public static ConsoleCommandSender Console; //2015.08.12. - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - Console=this.getServer().getConsoleSender(); - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - SaveFiles(); //2015.08.09. - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - //System.out.println("Start: "+start); - if(start==-1+"IGN:".length()) //+length: 2015.08.10. - continue; //2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - //System.out.println("End: "+end); - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - //System.out.println("IGN: "+ign); - ign = ign.trim(); - //System.out.println("Trimmed IGN: "+ign); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - /*else - flair = "non-presser";*/ - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - //return p.Flair!=null; //2015.08.08. - return p.CommentedOnReddit; //2015.08.10. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - p.FlairRecognised=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(--s)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(??s)§r"; - break; - case "unknown": - if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair - p.FlairDecided=false; - else - p.FlairRecognised=false; - finalflair=""; - break; - default: - //finalflair=""; - //break; - return; - } - /*if(finalflair.length()==0) //<-- 2015.07.20. - return;*/ - p.Flair=finalflair; //2015.08.08. - p.CommentedOnReddit=true; //2015.08.10. - p.UserName=username; //2015.08.08. - if(finalflair.length()==0) //Just for the message - finalflair="undecided"; - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - //return flair==null ? "" : flair; - return flair; //2015.08.10. - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //<-- 2015.08.10. - TownColors.put(s[0], s[1]); - } - br.close(); - } - file=new File("customflairs.txt"); //2015.08.09. - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //2015.08.10. - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); - p.Flair=s[1]; //2015.08.09. - p.CommentedOnReddit=true; //Kind of - } - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static void SaveFiles() //<-- 2015.08.09. - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static boolean RemoveLineFromFile(String file, String line) - { //2015.08.09. - File inputFile = new File(file); - File tempFile = new File("_temp.txt"); - - if(!inputFile.exists()) - return true; //2015.08.10. - - try { - BufferedReader reader = new BufferedReader(new FileReader(inputFile)); - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - - String lineToRemove = line; - String currentLine; - - while((currentLine = reader.readLine()) != null) { - // trim newline when comparing with lineToRemove - String trimmedLine = currentLine.trim(); - //if(trimmedLine.equals(lineToRemove)) continue; - if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. - writer.write(currentLine + System.getProperty("line.separator")); - } - writer.close(); - reader.close(); - if(!tempFile.renameTo(inputFile)) - { - inputFile.delete(); - return tempFile.renameTo(inputFile); - } - else - return true; - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - return false; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d4/b0b5a2a749a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/d4/b0b5a2a749a600151c15ab42d7919fee deleted file mode 100644 index 36262d8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d4/b0b5a2a749a600151c15ab42d7919fee +++ /dev/null @@ -1,125 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(int color) { - FlairColor = color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p = Bukkit.getPlayer(UUID); - p.setPlayerListName(String.format("%s%s", p.getPlayerListName(), - GetFormattedFlair())); - } - - public short GetFlairColor() { - return FlairColor; - } - - public String GetFlairTime() { - return FlairTime; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d5/d0e71dc1e140001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d5/d0e71dc1e140001514c09dece48b36c7 deleted file mode 100644 index e68eaa6..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d5/d0e71dc1e140001514c09dece48b36c7 +++ /dev/null @@ -1,450 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - SaveFiles(); //2015.08.09. - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - //System.out.println("Start: "+start); - if(start==-1+"IGN:".length()) //+length: 2015.08.10. - continue; //2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - //System.out.println("End: "+end); - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - //System.out.println("IGN: "+ign); - ign = ign.trim(); - //System.out.println("Trimmed IGN: "+ign); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - /*else - flair = "non-presser";*/ - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - //return p.Flair!=null; //2015.08.08. - return p.CommentedOnReddit; //2015.08.10. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - p.FlairRecognised=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(--s)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(??s)§r"; - break; - case "unknown": - if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair - p.FlairDecided=false; - else - p.FlairRecognised=false; - finalflair=""; - break; - default: - //finalflair=""; - //break; - return; - } - /*if(finalflair.length()==0) //<-- 2015.07.20. - return;*/ - p.Flair=finalflair; //2015.08.08. - p.CommentedOnReddit=true; //2015.08.10. - p.UserName=username; //2015.08.08. - if(finalflair.length()==0) //Just for the message - finalflair="undecided"; - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - //return flair==null ? "" : flair; - return flair; //2015.08.10. - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //<-- 2015.08.10. - TownColors.put(s[0], s[1]); - } - br.close(); - } - file=new File("customflairs.txt"); //2015.08.09. - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - if(s.length>=2) //2015.08.10. - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); - p.Flair=s[1]; //2015.08.09. - p.CommentedOnReddit=true; //Kind of - } - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static void SaveFiles() //<-- 2015.08.09. - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static boolean RemoveLineFromFile(String file, String line) - { //2015.08.09. - File inputFile = new File(file); - File tempFile = new File("_temp.txt"); - - if(!inputFile.exists()) - return true; //2015.08.10. - - try { - BufferedReader reader = new BufferedReader(new FileReader(inputFile)); - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - - String lineToRemove = line; - String currentLine; - - while((currentLine = reader.readLine()) != null) { - // trim newline when comparing with lineToRemove - String trimmedLine = currentLine.trim(); - //if(trimmedLine.equals(lineToRemove)) continue; - if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. - writer.write(currentLine + System.getProperty("line.separator")); - } - writer.close(); - reader.close(); - if(!tempFile.renameTo(inputFile)) - { - inputFile.delete(); - return tempFile.renameTo(inputFile); - } - else - return true; - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - return false; - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d6/2061743542a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/d6/2061743542a600151c15ab42d7919fee deleted file mode 100644 index c6c4f2e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d6/2061743542a600151c15ab42d7919fee +++ /dev/null @@ -1,364 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); // TODO: Quiz queue - // TODO: Flairs from Command Block The Button - Teams - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer().getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d6/a08b7a0ed03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/d6/a08b7a0ed03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 5d70e40..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d6/a08b7a0ed03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,198 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d7/a0f61d9bd03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/d7/a0f61d9bd03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 8abed8b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d7/a0f61d9bd03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,206 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d8/4044c9a7e240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d8/4044c9a7e240001514c09dece48b36c7 deleted file mode 100644 index 975702f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d8/4044c9a7e240001514c09dece48b36c7 +++ /dev/null @@ -1,297 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/da/a0d614ced03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/da/a0d614ced03e001518fa86d7ae2a1cf8 deleted file mode 100644 index a8b8f80..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/da/a0d614ced03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,210 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/db/50afb721e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/db/50afb721e640001514c09dece48b36c7 deleted file mode 100644 index d9ec7da..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/db/50afb721e640001514c09dece48b36c7 +++ /dev/null @@ -1,72 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - p.playSound(arg0, arg1, arg2, arg3) - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e/a0795133d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/e/a0795133d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index be2f453..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e/a0795133d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,376 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e/d03a30e844a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/e/d03a30e844a600151c15ab42d7919fee deleted file mode 100644 index 15d37e7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e/d03a30e844a600151c15ab42d7919fee +++ /dev/null @@ -1,107 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) - { - - } - - public void SetFlairTime(String time) - { - - } - - public void SetFlair(short color, String time) - - // TODO: Flairs from Command Block The Button - Teams - //PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - event.getPlayer().setPlayerListName(""); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e0/a07905a5cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/e0/a07905a5cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index d0c7fdd..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e0/a07905a5cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,71 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.Flair!=null) - PluginMain.AppendPlayerDisplayFlair(mp, p); - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(flair==null || !player.AcceptedFlair) - flair=""; //2015.08.08. - String message=event.getMessage(); //2015.08.08. - /*for(Player p : PluginMain.GetPlayers()) - { //2015.08.08. - message.replaceAll(p.getName(), ) - }*/ - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e3/20517c59cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/e3/20517c59cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 77a24f3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e3/20517c59cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,364 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press?§r"); - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e3/d0df3dbadf40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e3/d0df3dbadf40001514c09dece48b36c7 deleted file mode 100644 index e614358..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e3/d0df3dbadf40001514c09dece48b36c7 +++ /dev/null @@ -1,71 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.CommentedOnReddit) - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(player.IgnoredFlair) - flair=""; - String message=event.getMessage(); //2015.08.08. - for(Player p : PluginMain.GetPlayers()) - { //2015.08.12. - message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); - } - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e4/3060bf8dcf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/e4/3060bf8dcf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 620a063..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e4/3060bf8dcf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,364 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import tk.sznp.thebuttonautoflair.MaybeOfflinePlayer.FlairClassType; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - AppendPlayerDisplayFlair(player, username, finalflair); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e6/c048252a4ca600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/e6/c048252a4ca600151c15ab42d7919fee deleted file mode 100644 index 7aaa8dd..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e6/c048252a4ca600151c15ab42d7919fee +++ /dev/null @@ -1,603 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Player: " + Bukkit.getPlayer(Lastlol.UUID)); - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e9/504e12aee240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e9/504e12aee240001514c09dece48b36c7 deleted file mode 100644 index 4f33dd3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e9/504e12aee240001514c09dece48b36c7 +++ /dev/null @@ -1,298 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e9/c0b3154ce440001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e9/c0b3154ce440001514c09dece48b36c7 deleted file mode 100644 index 159e3e4..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e9/c0b3154ce440001514c09dece48b36c7 +++ /dev/null @@ -1,296 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/eb/3086890bd03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/eb/3086890bd03e001518fa86d7ae2a1cf8 deleted file mode 100644 index ce49e4e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/eb/3086890bd03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,198 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(player, p); - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/eb/40b3b71cad9e0015192daf17db672400 b/.metadata/.plugins/org.eclipse.core.resources/.history/eb/40b3b71cad9e0015192daf17db672400 deleted file mode 100644 index d65c83d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/eb/40b3b71cad9e0015192daf17db672400 +++ /dev/null @@ -1,595 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static boolean PluginUpdated = false; // 2015.08.31. - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); // 2015.08.08. - switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. - { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/eb/d028dc51d8a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/eb/d028dc51d8a500151c15ab42d7919fee deleted file mode 100644 index 08e6396..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/eb/d028dc51d8a500151c15ab42d7919fee +++ /dev/null @@ -1,596 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) - { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ec/f0e2d8a2d8a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/ec/f0e2d8a2d8a500151c15ab42d7919fee deleted file mode 100644 index 01ff1c5..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ec/f0e2d8a2d8a500151c15ab42d7919fee +++ /dev/null @@ -1,597 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - Player p=null; - if(Lastlol!=null || Bukkit.getPlayer(Lastlol.UUID)) - Lastlol.UUID - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ed/f00520bce240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ed/f00520bce240001514c09dece48b36c7 deleted file mode 100644 index f1e321a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ed/f00520bce240001514c09dece48b36c7 +++ /dev/null @@ -1,299 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - //System.out.println(message); - PluginMain.Console.sendMessage(message); //2015.08.12. - else - player.sendMessage(message); - - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ee/306a96924aa600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/ee/306a96924aa600151c15ab42d7919fee deleted file mode 100644 index 705d7bd..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ee/306a96924aa600151c15ab42d7919fee +++ /dev/null @@ -1,364 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.GetFlairColor() == 0x00 ? 0xb - : mp.GetFlairColor())); // TODO: Quiz queue - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer() - .getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ef/206bbc9acf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/ef/206bbc9acf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index a085586..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ef/206bbc9acf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,71 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import de.inventivegames.TellRawAutoMessage.Reflection; - -public class PlayerListener implements Listener -{ //2015.07.16. - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player p=event.getPlayer(); - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. - if(mp.Flair!=null) - PluginMain.AppendPlayerDisplayFlair(p, mp.UserName, mp.Flair); - else - { //2015.07.20. - String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; - sendRawMessage(p, json); - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); - String flair=player.Flair; //2015.08.08. - if(flair==null || !player.AcceptedFlair) - flair=""; //2015.08.08. - String message=event.getMessage(); //2015.08.08. - /*for(Player p : PluginMain.GetPlayers()) - { //2015.08.08. - message.replaceAll(p.getName(), ) - }*/ - event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. - } - - private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); - private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); - public static void sendRawMessage(Player player, String message) - { - try { - System.out.println("1"); - Object handle = Reflection.getHandle(player); - System.out.println("2"); - Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); - System.out.println("3"); - Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); - System.out.println("4"); - Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); - System.out.println("5"); - Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); - System.out.println("6"); - } catch (Exception e) { - e.printStackTrace(); - PluginMain.LastException=e; //2015.08.09. - } - } - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f/a0d81438d33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/f/a0d81438d33e001518fa86d7ae2a1cf8 deleted file mode 100644 index f17161d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f/a0d81438d33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,216 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; - //SendMessage(player, msg); //2015.08.09. - - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f/b08c4dd3d13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/f/b08c4dd3d13e001518fa86d7ae2a1cf8 deleted file mode 100644 index fbfb948..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f/b08c4dd3d13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,372 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { - MaybeOfflinePlayer.AllPlayers.clear(); //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f0/b01766da4ba600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/f0/b01766da4ba600151c15ab42d7919fee deleted file mode 100644 index 0648957..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f0/b01766da4ba600151c15ab42d7919fee +++ /dev/null @@ -1,604 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Lastlol: " + Lastlol); - System.out.println("Player: " + Bukkit.getPlayer(Lastlol.UUID)); - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f2/205fa4c2d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/f2/205fa4c2d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index 5dcd8d1..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f2/205fa4c2d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,209 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - - } - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f2/a0380b49d03e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/f2/a0380b49d03e001518fa86d7ae2a1cf8 deleted file mode 100644 index c1a5059..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f2/a0380b49d03e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,200 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - break; - case "cantpress": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f3/203061bfd23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/f3/203061bfd23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 717cff8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f3/203061bfd23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Reloaded all files.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f3/a09a2529d33e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/f3/a09a2529d33e001518fa86d7ae2a1cf8 deleted file mode 100644 index 2a7e8d7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f3/a09a2529d33e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,215 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§7(non-pr.)§r"; - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - p.Flair="§r(can't press)§r"; - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - } - //String msg="§6Reloaded config file.§r"; - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f3/b07c2ef049a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/f3/b07c2ef049a600151c15ab42d7919fee deleted file mode 100644 index f53b4ae..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f3/b07c2ef049a600151c15ab42d7919fee +++ /dev/null @@ -1,353 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.IOUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.htmlcleaner.HtmlCleaner; -import org.htmlcleaner.TagNode; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.*; -import java.lang.String; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.URLConnection; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.TimeZone; - -public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. - // A user, which flair isn't obtainable: - // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - public static PluginMain Instance; - public static ConsoleCommandSender Console; // 2015.08.12. - - // Fired when plugin is first enabled - @Override - public void onEnable() { - try { - System.out.println("Extracting necessary libraries..."); - final File[] libs = new File[] { new File(getDataFolder(), - "htmlcleaner-2.16.jar") }; - for (final File lib : libs) { - if (!lib.exists()) { - JarUtils.extractFromJar(lib.getName(), - lib.getAbsolutePath()); - } - } - for (final File lib : libs) { - if (!lib.exists()) { - getLogger().warning( - "Failed to load plugin! Could not find lib: " - + lib.getName()); - Bukkit.getServer().getPluginManager().disablePlugin(this); - return; - } - addClassPath(JarUtils.getJarUrl(lib)); - } - } catch (final Exception e) { - e.printStackTrace(); - } - - getServer().getPluginManager().registerEvents(new PlayerListener(), - this); - Commands comm = new Commands(); - this.getCommand("u").setExecutor(comm); - this.getCommand("u").setUsage( - this.getCommand("u").getUsage().replace('&', '§')); - this.getCommand("nrp").setExecutor(comm); - this.getCommand("nrp").setUsage( - this.getCommand("nrp").getUsage().replace('&', '§')); - this.getCommand("ooc").setExecutor(comm); - this.getCommand("ooc").setUsage( - this.getCommand("ooc").getUsage().replace('&', '§')); - Instance = this; // 2015.08.08. - Console = this.getServer().getConsoleSender(); // 2015.08.12. - LoadFiles(false); // 2015.08.09. - Runnable r = new Runnable() { - public void run() { - ThreadMethod(); - } - }; - Thread t = new Thread(r); - t.start(); - r = new Runnable() { - public void run() { - AnnouncerThread.Run(); - } - }; - t = new Thread(r); - t.start(); - } - - public Boolean stop = false; - - // Fired when plugin is disabled - @Override - public void onDisable() { - SaveFiles(); // 2015.08.09. - stop = true; - } - - private void ThreadMethod() { - while (!stop) { - try { - String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json = new JSONArray(body).getJSONObject(1) - .getJSONObject("data").getJSONArray("children"); - for (Object obj : json) { - JSONObject item = (JSONObject) obj; - String author = item.getJSONObject("data").getString( - "author"); - String ign = item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - if (start == -1 + "IGN:".length()) // +length: 2015.08.10. - continue; // 2015.08.09. - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end = ign.indexOf('\n', start); // 2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); - if (mp == null) - continue; - if (!mp.UserNames.contains(author)) - mp.UserNames.add(author); - if (mp.FlairState.equals(FlairStates.NoComment)) { - mp.FlairState = FlairStates.Commented; - ConfirmUserMessage(mp); - } - try { - Thread.sleep(10); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } - try { - Thread.sleep(10000); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } catch (Exception e) { - // System.out.println("Error!\n" + e); - LastException = e; // 2015.08.09. - } - } - } - - public void DownloadFlair(MaybeOfflinePlayer mp) - throws MalformedURLException, IOException { - String[] flairdata = DownloadString( - "http://karmadecay.com/thebutton-data.php?users=" + mp.UserName) - .replace("\"", "").split(":"); - String flair; - if (flairdata.length > 1) - flair = flairdata[1]; - else - flair = ""; - String flairclass; - if (flairdata.length > 2) - flairclass = flairdata[2]; - else - flairclass = "unknown"; - SetFlair(mp, flair, flairclass, mp.UserName); - } - - public static Exception LastException; // 2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, - IOException { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - private void SetFlair(MaybeOfflinePlayer p, String text, String flairclass, - String username) { - p.UserName = username; - p.FlairState = FlairStates.Recognised; - switch (flairclass) { - case "press-1": - p.SetFlairColor(0xc); - break; - case "press-2": - p.SetFlairColor(0x6); - break; - case "press-3": - p.SetFlairColor(0xe); - break; - case "press-4": - p.SetFlairColor(0xa); - break; - case "press-5": - p.SetFlairColor(0x9); - break; - case "press-6": - p.SetFlairColor(0x5); - break; - case "no-press": - p.SetFlairColor(0x7); - break; - case "cheater": - p.SetFlairColor(0x5); - break; - case "cant-press": - p.SetFlairColor(0xf); - break; - case "unknown": - if (text.equals("-1")) // If true, only non-presser/can't press; if - // false, any flair - { - try { - if (CheckForJoinDate(p)) { - p.SetFlair(0x7, "--"); - } else { - p.SetFlair(0xf, "--"); - } - } catch (Exception e) { - p.FlairState = FlairStates.Commented; // Flair unknown - p.SetFlairColor(0); - e.printStackTrace(); - } - } else { - p.FlairState = FlairStates.Commented; // Flair unknown - p.SetFlairColor(0); - } - return; - default: - return; - } - if (text.equals("-1")) - text = "--"; - p.FlairTime = text; - } - - public static boolean CheckForJoinDate(MaybeOfflinePlayer mp) - throws Exception { - URL url = new URL("https://www.reddit.com/u/" + mp.UserName); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - HtmlCleaner cleaner = new HtmlCleaner(); - TagNode node = cleaner.clean(in); - - node = node.getElementsByAttValue("class", "age", true, true)[0]; - node = node.getElementsByName("time", false)[0]; - String joindate = node.getAttributeByName("datetime"); - SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd"); - joindate = joindate.split("T")[0]; - Date date = parserSDF.parse(joindate); - return date.before(new Calendar.Builder() - .setTimeZone(TimeZone.getTimeZone("UTC")).setDate(2015, 4, 1) - .build().getTime()); - } - - public static void ConfirmUserMessage(MaybeOfflinePlayer mp) { - Player p = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented) && p != null) - if (mp.UserNames.size() > 1) - p.sendMessage("§9Multiple Reddit users commented your name. You can select with /u accept.§r §6Type /u accept or /u ignore§r"); - else - p.sendMessage("§9A Reddit user commented your name. Is that you?§r §6Type /u accept or /u ignore§r"); - } - - public static Collection GetPlayers() { - return Instance.getServer().getOnlinePlayers(); - } - - public static ArrayList AnnounceMessages = new ArrayList<>(); - public static int AnnounceTime = 15 * 60 * 1000; - - public static void LoadFiles(boolean reload) { - if (reload) { - System.out - .println("The Button Minecraft plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - AnnounceMessages.clear(); - } - System.out.println("Loading files for The Button Minecraft plugin..."); - try { - File file = new File("announcemessages.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsaccepted.txt"); - if (file.exists()) - file.delete(); - file = new File("flairsignored.txt"); - if (file.exists()) - file.delete(); - file = new File("thebuttonmc.yml"); - if (file.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - yc.load(file); - MaybeOfflinePlayer.Load(yc); - PlayerListener.NotificationSound = yc - .getString("notificationsound"); - PlayerListener.NotificationPitch = yc - .getDouble("notificationpitch"); - AnnounceTime = yc.getInt("announcetime"); - AnnounceMessages.addAll(yc.getStringList("announcements")); - } - System.out.println("The Button Minecraft plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } catch (InvalidConfigurationException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - public static void SaveFiles() { - System.out.println("Saving files for The Button Minecraft plugin..."); - try { - File file = new File("thebuttonmc.yml"); - YamlConfiguration yc = new YamlConfiguration(); - MaybeOfflinePlayer.Save(yc); - yc.set("notificationsound", PlayerListener.NotificationSound); - yc.set("notificationpitch", PlayerListener.NotificationPitch); - yc.set("announcetime", AnnounceTime); - yc.set("announcements", AnnounceMessages); - yc.save(file); - System.out.println("The Button Minecraft plugin saved files!"); - } catch (IOException e) { - System.out.println("Error!\n" + e); - LastException = e; - } - } - - private void addClassPath(final URL url) throws IOException { - final URLClassLoader sysloader = (URLClassLoader) ClassLoader - .getSystemClassLoader(); - final Class sysclass = URLClassLoader.class; - try { - final Method method = sysclass.getDeclaredMethod("addURL", - new Class[] { URL.class }); - method.setAccessible(true); - method.invoke(sysloader, new Object[] { url }); - } catch (final Throwable t) { - t.printStackTrace(); - throw new IOException("Error adding " + url - + " to system classloader"); - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f4/20d00369d23e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/20d00369d23e001518fa86d7ae2a1cf8 deleted file mode 100644 index 7316b80..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f4/20d00369d23e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,380 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { //2015.08.09. - System.out.println("Auto-flair plugin cleanup for reloading..."); - MaybeOfflinePlayer.AllPlayers.clear(); - TownColors.clear(); - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - System.out.println("Auto-flair plugin loaded files!"); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - public static void SaveFiles() - { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f5/60e49bf5de40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/f5/60e49bf5de40001514c09dece48b36c7 deleted file mode 100644 index 45cf563..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f5/60e49bf5de40001514c09dece48b36c7 +++ /dev/null @@ -1,297 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.commons.io.FileUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) - { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) - { //2015.08.10. - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - PluginMain.AppendPlayerDisplayFlair(p, player); - player.sendMessage("§9Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - //String flair=p.Flair; //2015.08.08. - //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type.§r"); - break; - } - SetPlayerFlair(player, p, "§7(--s)§r"); - break; - case "cantpress": //2015.08.09. - if(!p.AcceptedFlair) - { - player.sendMessage("§cYou need to accept the flair first.§r"); - break; - } - if(p.FlairDecided) - { - player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); - break; - } - SetPlayerFlair(player, p, "§r(??s)§r"); - break; - case "opme": //2015.08.10. - player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.LoadFiles(true); //2015.08.09. - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); - //if(mp.Flair!=null) - if(mp.CommentedOnReddit) - { - PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. - } - String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. - p.sendMessage(msg); //2015.08.09. - } - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static Player ReloadPlayer; //2015.08.09. - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - ReloadPlayer=player; //2015.08.09. - SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; //<-- 2015.08.10. - case "confirm": - if(ReloadPlayer==player) - DoReload(player); //2015.08.09. - else - SendMessage(player, "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); //2015.08.09. - SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": //2015.08.10. - DoUpdatePlugin(player); - break; - default: - String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - SendMessage(player, "Flair decided: "+p.FlairDecided); - SendMessage(player, "Flair recognised: "+p.FlairRecognised); - SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } - private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) - { //2015.08.09. - flair=flair.replace('&', '§'); - targetplayer.Flair=flair; - targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way - if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) - { - SendMessage(player, "§cError removing previous custom flair!§r"); - return; - } - File file=new File("customflairs.txt"); - try { - BufferedWriter bw; - bw = new BufferedWriter(new FileWriter(file, true)); - bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); - } - private static void DoSetFlair(Player player, String[] args) - { - //args[0] is "admin" - args[1] is "setflair" - if(args.length<4) - { - SendMessage(player, "§cUsage: /u admin setflair "); - return; - } - SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); - } - private static void DoUpdatePlugin(Player player) - { //2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } - catch (MalformedURLException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - catch (IOException e) { - System.out.println("Error!\n"+e); - PluginMain.LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f5/a069aa5a45a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/f5/a069aa5a45a600151c15ab42d7919fee deleted file mode 100644 index e854e6f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f5/a069aa5a45a600151c15ab42d7919fee +++ /dev/null @@ -1,115 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -public class MaybeOfflinePlayer { - public String PlayerName; - public String UserName; - public List UserNames; - private String FlairTime; - private short FlairColor; - public FlairStates FlairState; - public boolean RPMode = true; - public boolean PressedF; - public Location SavedLocation; - public boolean Working; - public int Tables = 10; - - public UUID UUID; - - public static HashMap AllPlayers = new HashMap<>(); - - public static MaybeOfflinePlayer AddPlayerIfNeeded(UUID uuid) { - if (!AllPlayers.containsKey(uuid)) { - MaybeOfflinePlayer player = new MaybeOfflinePlayer(); - player.UUID = uuid; - player.FlairColor = 0; - player.FlairTime = ""; - player.FlairState = FlairStates.NoComment; - player.UserNames = new ArrayList<>(); - AllPlayers.put(uuid, player); - return player; - } - return AllPlayers.get(uuid); - } - - public static void Load(YamlConfiguration yc) { - ConfigurationSection cs = yc.getConfigurationSection("players"); - for (String key : cs.getKeys(false)) { - ConfigurationSection cs2 = cs.getConfigurationSection(key); - MaybeOfflinePlayer mp = AddPlayerIfNeeded(java.util.UUID - .fromString(cs2.getString("uuid"))); - mp.UserName = cs2.getString("username"); - mp.FlairColor = (short) cs2.getInt("flaircolor"); - mp.FlairTime = cs2.getString("flairtime"); - String flairstate = cs2.getString("flairstate"); - if (flairstate != null) - mp.FlairState = FlairStates.valueOf(flairstate); - else - mp.FlairState = FlairStates.NoComment; - mp.PlayerName = cs2.getString("playername"); - mp.UserNames = cs2.getStringList("usernames"); - } - } - - public static void Save(YamlConfiguration yc) { - ConfigurationSection cs = yc.createSection("players"); - for (MaybeOfflinePlayer mp : MaybeOfflinePlayer.AllPlayers.values()) { - ConfigurationSection cs2 = cs.createSection(mp.UUID.toString()); - cs2.set("playername", mp.PlayerName); - cs2.set("username", mp.UserName); - cs2.set("flaircolor", mp.FlairColor); - cs2.set("flairtime", mp.FlairTime); - cs2.set("flairstate", mp.FlairState.toString()); - cs2.set("uuid", mp.UUID.toString()); - cs2.set("usernames", mp.UserNames); - } - } - - public static MaybeOfflinePlayer GetFromName(String name) { - for (MaybeOfflinePlayer mp : AllPlayers.values()) - if (mp.PlayerName.equalsIgnoreCase(name)) - return mp; - return null; - } - - public String GetFormattedFlair() { - if (FlairColor == 0x00) - return ""; - if (FlairTime == null || FlairTime.length() == 0) - return String.format("§%x(??s)§r", FlairColor); - return String.format("§%x(%ss)§r", FlairColor, FlairTime); - } - - public void SetFlairColor(short color) { - FlairColor = color; - SetFlair2(); - } - - public void SetFlairTime(String time) { - FlairTime = time; - SetFlair2(); - } - - public void SetFlair(short color, String time) { - FlairColor = color; - FlairTime = time; - SetFlair2(); - } - - private void SetFlair2() { - - // Flairs from Command Block The Button - Teams - // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Bukkit.getPlayer(UUID); - p.setPlayerListName(String.Format("%s%s", )); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f7/7055129442a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/f7/7055129442a600151c15ab42d7919fee deleted file mode 100644 index f08f9cb..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f7/7055129442a600151c15ab42d7919fee +++ /dev/null @@ -1,365 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.FlairColor == 0x00 ? 0xb - : mp.FlairColor)); // TODO: Quiz queue - // TODO: Flairs from Command Block The Button - Teams - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer() - .getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f9/a01791b5d13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/f9/a01791b5d13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 6f7db8d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f9/a01791b5d13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,369 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) - { - MaybeOfflinePlayer.AllPlayers.clear(); - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fa/b05b33334ba600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/fa/b05b33334ba600151c15ab42d7919fee deleted file mode 100644 index f8a30d7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/fa/b05b33334ba600151c15ab42d7919fee +++ /dev/null @@ -1,603 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.SetFlairTime(""); - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": - Player p = null; - System.out.println("Lastlol: " + Lastlol); - if (Lastlol != null - || (p = Bukkit.getPlayer(Lastlol.UUID)) != null) { - p.addPotionEffect(new PotionEffect( - PotionEffectType.BLINDNESS, 10, 5, false, false)); - for (Player pl : PluginMain.GetPlayers()) - pl.sendMessage(player.getDisplayName() + " unlolled " - + p.getDisplayName()); - Lastlol = null; - } - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.SetFlair(flaircolor, flairtime); - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fb/307961d7cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/fb/307961d7cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index ccaedeb..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/fb/307961d7cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,363 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - player.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fc/80951d9441a600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/fc/80951d9441a600151c15ab42d7919fee deleted file mode 100644 index ac36cf3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/fc/80951d9441a600151c15ab42d7919fee +++ /dev/null @@ -1,597 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - Player p=null; - if(Lastlol!=null || (p=Bukkit.getPlayer(Lastlol.UUID))!=null) - p.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 10, 5, false, false)); - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fe/204112ead13e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/fe/204112ead13e001518fa86d7ae2a1cf8 deleted file mode 100644 index 318be3d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/fe/204112ead13e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,374 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.io.IOUtils; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.JSONArray; -import org.json.JSONObject; - -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.WorldCoord; - -public class PluginMain extends JavaPlugin -{ //Translated to Java: 2015.07.15. - //A user, which flair isn't obtainable: - //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ - private static PluginMain Instance; - // Fired when plugin is first enabled - @Override - public void onEnable() - { - System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - this.getCommand("u").setExecutor(new Commands()); - this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); - Instance=this; //2015.08.08. - LoadFiles(false); //2015.08.09. - Runnable r=new Runnable(){public void run(){ThreadMethod();}}; - Thread t=new Thread(r); - t.start(); - } - Boolean stop=false; - // Fired when plugin is disabled - @Override - public void onDisable() - { - try - { - FileWriter fw; - fw = new FileWriter("flairsaccepted.txt"); - fw.close(); - fw = new FileWriter("flairsignored.txt"); - fw.close(); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - try { - File file=new File("flairsaccepted.txt"); - BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.AcceptedFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - file=new File("flairsignored.txt"); - bw = new BufferedWriter(new FileWriter(file, true)); - for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. - { - if(!player.IgnoredFlair) - continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); - } - bw.close(); - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - stop=true; - } - - public void ThreadMethod() //<-- 2015.07.16. - { - while(!stop) - { - try - { - String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); - JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); - for(Object obj : json) - { - JSONObject item = (JSONObject)obj; - String author=item.getJSONObject("data").getString("author"); - String ign=item.getJSONObject("data").getString("body"); - int start = ign.indexOf("IGN:") + "IGN:".length(); - int end = ign.indexOf(' ', start); - if (end == -1 || end == start) - end=ign.indexOf('\n', start); //2015.07.15. - if (end == -1 || end == start) - ign = ign.substring(start); - else - ign = ign.substring(start, end); - ign = ign.trim(); - if(HasIGFlair(ign)) - continue; - try { - Thread.sleep(10); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); - String flair; - if(flairdata.length > 1) //2015.07.15. - flair = flairdata[1]; - else - flair=""; - if (flair != "-1") - flair = flair + "s"; - else - flair = "non-presser"; - String flairclass; - if(flairdata.length>2) - flairclass = flairdata[2]; - else - flairclass="unknown"; - SetFlair(ign, flair, flairclass, author); - } - Thread.sleep(10000); - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } - } - - public static Exception LastException; //2015.08.09. - - public String DownloadString(String urlstr) throws MalformedURLException, IOException - { - URL url = new URL(urlstr); - URLConnection con = url.openConnection(); - con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - in.close(); - return body; - } - - public static Map TownColors=new HashMap(); //2015.07.20. - public Boolean HasIGFlair(String playername) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - return p.Flair!=null; //2015.08.08. - } - - public void SetFlair(String playername, String text, String flairclass, String username) - { - MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. - String finalflair; - p.FlairDecided=true; - switch(flairclass) - { - case "press-1": - finalflair="§c("+text+")§r"; - break; - case "press-2": - finalflair="§6("+text+")§r"; - break; - case "press-3": - finalflair="§e("+text+")§r"; - break; - case "press-4": - finalflair="§a("+text+")§r"; - break; - case "press-5": - finalflair="§9("+text+")§r"; - break; - case "press-6": - finalflair="§5("+text+")§r"; - break; - case "no-press": - finalflair="§7(non-pr.)§r"; - break; - case "cheater": - finalflair="§5("+text+")§r"; - break; - case "cant-press": //2015.08.08. - finalflair="§r(can't press)§r"; - break; - case "undecided": //2015.08.09. - p.FlairDecided=false; - finalflair=""; - break; - default: - finalflair=""; - break; - } - if(finalflair.length()==0) //<-- 2015.07.20. - return; - p.Flair=finalflair; //2015.08.08. - p.UserName=username; //2015.08.08. - System.out.println("Added new flair to "+playername+": "+finalflair); - for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. - { - if(player.getName().equals(playername)) - { - //AppendPlayerDisplayFlair(player, username, finalflair); - AppendPlayerDisplayFlair(p, player); - break; - } - } - } - - public static String GetFlair(Player player) - { //2015.07.16. - String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. - return flair==null ? "" : flair; - } - - //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) - public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. - { - - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) - return; - if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) - { - AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. - if(!player.FlairDecided) - p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. - } - else - p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); - } - - private static void AppendPlayerDisplayFlairFinal(Player player, String flair) - { //2015.07.20. - String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters - String[] colors = color.substring(1).split("§"); - String displayname=player.getName(); //2015.08.08. - ArrayList Positions=new ArrayList<>(); - for(int i=0; i=colors.length) - { - int x=0; - for(int i=0; i GetPlayers() - { - return Instance.getServer().getOnlinePlayers(); - } - - public static void LoadFiles(boolean reload) //<-- 2015.08.09. - { - if(reload) - { - System.out.println("Reloading files for auto-flair plugin..."); - MaybeOfflinePlayer.AllPlayers.clear(); //2015.08.09. - } - System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. - try { - File file=new File("flairsaccepted.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - //System.out.println("Name: " + name); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("flairsignored.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); - String line; - while ((line = br.readLine()) != null) - { - String name=line.replace("\n", ""); - MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. - } - br.close(); - } - file=new File("autoflairconfig.txt"); - if(file.exists()) - { - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - TownColors.put(s[0], s[1]); - } - br.close(); - } - //throw new IOException("Test"); //2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n"+e); - LastException=e; //2015.08.09. - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fe/f0cde596d8a500151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/fe/f0cde596d8a500151c15ab42d7919fee deleted file mode 100644 index f031b8c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/fe/f0cde596d8a500151c15ab42d7919fee +++ /dev/null @@ -1,596 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.earth2me.essentials.Mob; -import com.earth2me.essentials.Mob.MobException; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Random; -import java.util.Timer; - -public class Commands implements CommandExecutor { - - public static MaybeOfflinePlayer Lastlol = null; - - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, - String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - switch (cmd.getName()) { - case "u": { - if (args.length < 1) - return false; - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(player - .getUniqueId()); - switch (args[0].toLowerCase()) { - case "accept": { - if (args.length < 2 && p.UserNames.size() > 1) { - player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - player.sendMessage(sb.toString()); - return true; - } - if (p.FlairState.equals(FlairStates.NoComment) - || p.UserNames.size() == 0) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (args.length > 1 && !p.UserNames.contains(args[1])) { - player.sendMessage("§cError: Unknown name: " + args[1] - + "§r"); - return true; - } - if (p.Working) { - player.sendMessage("§cError: Something is already in progress.§r"); - return true; - } - - if ((args.length > 1 ? args[1] : p.UserNames.get(0)) - .equals(p.UserName)) { - player.sendMessage("§cYou already have this user's flair.§r"); - return true; - } - if (args.length > 1) - p.UserName = args[1]; - else - p.UserName = p.UserNames.get(0); - - player.sendMessage("§bObtaining flair..."); - p.Working = true; - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - try { - PluginMain.Instance.DownloadFlair(mp); - } catch (Exception e) { - e.printStackTrace(); - } - - Player player = Bukkit.getPlayer(mp.UUID); - if (mp.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); - return; - } - String flair = mp.GetFormattedFlair(); - mp.FlairState = FlairStates.Accepted; - PluginMain.ConfirmUserMessage(mp); - player.sendMessage("§bYour flair has been set:§r " - + flair); - mp.Working = false; - } - }; - tt.mp = p; - timer.schedule(tt, 20); - break; - } - case "ignore": { - if (p.FlairState.equals(FlairStates.NoComment)) { - player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); - return true; - } - if (p.FlairState.equals(FlairStates.Commented)) { - player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); - return true; - } - if (!p.FlairState.equals(FlairStates.Ignored)) { - p.FlairState = FlairStates.Ignored; - p.FlairTime = ""; - p.UserName = ""; - player.sendMessage("§bYou have removed your flair. You can still use /u accept to get one.§r"); - } else - player.sendMessage("§cYou already removed your flair.§r"); - break; - } - case "admin": // 2015.08.09. - DoAdmin(player, args); - break; - case "opme": // 2015.08.10. - player.sendMessage("It would be nice, wouldn't it?"); // Sometimes - // I'm - // bored - // too - break; - case "announce": - DoAnnounce(player, args, null); - break; - case "name": - if (args.length == 1) { - player.sendMessage("§cUsage: /u name §r"); - break; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer - .GetFromName(args[1]); - if (mp == null) { - player.sendMessage("§cUnknown user: " + args[1]); - break; - } - player.sendMessage("§bUsername of " + args[1] + ": " - + mp.UserName); - break; - case "enable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = true; - player.sendMessage("Enabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "disable": - if (player.getName().equals("NorbiPeti")) { - PlayerListener.Enable = false; - player.sendMessage("Disabled."); - } else - player.sendMessage("Unknown command: " + cmd.getName()); - break; - case "kittycannon": - DoKittyCannon(player, args); - break; - default: - return false; - } - return true; - } - case "nrp": - case "ooc": - if (args.length == 0) { - return false; - } else { - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; - String message = ""; - for (String arg : args) - message += arg + " "; - player.chat(message.substring(0, message.length() - 1)); - MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; - } - return true; - case "unlol": // TODO: Unlol - if(Lastlol!=nullBukkit.getPlayer(Lastlol.UUID)) - Lastlol.UUID - return true; - default: - player.sendMessage("Unknown command: " + cmd.getName()); - break; - } - } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. - { - DoAdmin(null, args); // 2015.08.09. - return true; // 2015.08.09. - } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { - if (sender instanceof BlockCommandSender) - DoAnnounce(null, args, (BlockCommandSender) sender); - else - DoAnnounce(null, args, null); - return true; - } - return false; - } - - private static void DoReload(Player player) { // 2015.07.20. - try { - PluginMain.Console - .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); - PluginMain.LoadFiles(true); // 2015.08.09. - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - if (mp.FlairState.equals(FlairStates.Recognised) - || mp.FlairState.equals(FlairStates.Commented)) { - PluginMain.ConfirmUserMessage(mp); - } - String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. - p.sendMessage(msg); // 2015.08.09. - } - PluginMain.Console.sendMessage("§6-- Reloading done!§r"); - } catch (Exception e) { - System.out.println("Error!\n" + e); - if (player != null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static Player ReloadPlayer; // 2015.08.09. - - private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; - - private static void DoAdmin(Player player, String[] args) { // 2015.08.09. - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - // args[0] is "admin" - switch (args[1].toLowerCase()) { - case "reload": - ReloadPlayer = player; // 2015.08.09. - SendMessage( - player, - "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - break; // <-- 2015.08.10. - case "confirm": - if (ReloadPlayer == player) - DoReload(player); // 2015.08.09. - else - SendMessage(player, - "§cYou need to do /u admin reload first.§r"); - break; - case "save": - PluginMain.SaveFiles(); // 2015.08.09. - SendMessage(player, - "§bSaved files. Now you can edit them and reload if you want.§r"); - break; - case "setflair": - DoSetFlair(player, args); - break; - case "updateplugin": // 2015.08.10. - DoUpdatePlugin(player); - break; - case "togglerpshow": - PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; - SendMessage(player, "RP tag showing " - + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); - break; - case "toggledebug": - PlayerListener.DebugMode = !PlayerListener.DebugMode; - SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); - break; - case "savepos": - DoSaveLoadPos(player, args); - break; - case "loadpos": - DoSaveLoadPos(player, args); - break; - case "updatedynmap": - DoUpdateDynmap(player, args); - default: - String message = DoAdminUsage; - SendMessage(player, message); - return; - } - } else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - - private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "playerinfo" - if (args.length == 2) { - String message = "§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); - if (p == null) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - SendMessage(player, "Player name: " + p.PlayerName); - SendMessage(player, "User flair: " + p.GetFormattedFlair()); - SendMessage(player, "Username: " + p.UserName); - SendMessage(player, "Flair state: " + p.FlairState); - StringBuilder sb = new StringBuilder(); - sb.append("§6Usernames:"); - for (String username : p.UserNames) - sb.append(" ").append(username); - SendMessage(player, sb.toString()); - } - - private static void SendMessage(Player player, String message) { // 2015.08.09. - if (player == null) - PluginMain.Console.sendMessage(message); // 2015.08.12. - else - player.sendMessage(message); - } - - private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "getlasterror" - if (PluginMain.LastException != null) { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException = null; - } else - SendMessage(player, "There were no exceptions."); - } - - private static void SetPlayerFlair(Player player, - MaybeOfflinePlayer targetplayer, short flaircolor, String flairtime) { - targetplayer.FlairColor = flaircolor; - targetplayer.FlairTime = flairtime; - targetplayer.FlairState = FlairStates.Accepted; - targetplayer.UserName = ""; - SendMessage(player, - "§bThe flair has been set. Player: " + targetplayer.PlayerName - + " Flair: " + targetplayer.GetFormattedFlair() + "§r"); - } - - private static void DoSetFlair(Player player, String[] args) { - // args[0] is "admin" - args[1] is "setflair" - if (args.length < 4) { - SendMessage(player, - "§cUsage: /u admin setflair [number]"); - return; - } - Player p = Bukkit.getPlayer(args[2]); - if (p == null) { - SendMessage(player, "§cPLayer not found.&r"); - return; - } - short flaircolor = 0x00; - try { - flaircolor = Short.parseShort(args[3], 16); - } catch (Exception e) { - SendMessage(player, - "§cFlaircolor must be a hexadecimal number (don't include &)."); - return; - } - SetPlayerFlair(player, - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), - flaircolor, (args.length < 5 ? "" : args[4])); - } - - private static void DoUpdatePlugin(Player player) { // 2015.08.10. - SendMessage(player, "Updating Auto-Flair plugin..."); - System.out.println("Forced updating of Auto-Flair plugin."); - URL url; - try { - url = new URL( - "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); - FileUtils.copyURLToFile(url, new File( - "plugins/TheButtonAutoFlair.jar")); - PluginUpdated = true; // 2015.08.31. - SendMessage(player, "Updating done!"); - } catch (MalformedURLException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } catch (IOException e) { - System.out.println("Error!\n" + e); - PluginMain.LastException = e; // 2015.08.09. - } - } - - private static void DoAnnounce(Player player, String[] args, - BlockCommandSender commandblock) { - if (player == null || player.isOp() - || player.getName().equals("NorbiPeti")) { - if (args.length == 1) { - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - switch (args[1].toLowerCase()) { - case "add": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce add "); - return; - } - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < args.length; i++) { - sb.append(args[i]); - if (i != args.length - 1) - sb.append(" "); - } - String finalmessage = sb.toString().replace('&', '§'); - PluginMain.AnnounceMessages.add(finalmessage); - SendMessage(player, "§bAnnouncement added.§r"); - break; - case "remove": - if (args.length < 3) { - SendMessage(player, "§cUsage: /u announce remove "); - return; - } - PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); - break; - case "settime": - if (args.length < 3) { - SendMessage(player, - "§cUsage: /u announce settime "); - return; - } - PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; - SendMessage(player, "Time set between announce messages"); - break; - case "list": - SendMessage(player, "§bList of announce messages:§r"); - SendMessage(player, "§bFormat: [index] message§r"); - int i = 0; - for (String message : PluginMain.AnnounceMessages) - SendMessage(player, "[" + i++ + "] " + message); - SendMessage(player, - "§bCurrent wait time between announcements: " - + PluginMain.AnnounceTime / 60 / 1000 - + " minute(s)§r"); - break; - case "edit": - if (commandblock == null) { - SendMessage( - player, - "§cError: This command can only be used from a command block. Use /u announce remove."); - break; - } - if (args.length < 4) { - commandblock - .sendMessage("§cUsage: /u announce edit "); - return; - } - StringBuilder sb1 = new StringBuilder(); - for (int i1 = 3; i1 < args.length; i1++) { - sb1.append(args[i1]); - if (i1 != args.length - 1) - sb1.append(" "); - } - String finalmessage1 = sb1.toString().replace('&', '§'); - int index = Integer.parseInt(args[2]); - if (index > 100) - break; - while (PluginMain.AnnounceMessages.size() <= index) - PluginMain.AnnounceMessages.add(""); - PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), - finalmessage1); - commandblock.sendMessage("Announcement edited."); - break; - default: - String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; - SendMessage(player, message); - return; - } - } - } - - @SuppressWarnings("unused") - private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. - // args[0] is "admin" - args[1] is "savepos|loadpos" - if (args.length == 2) { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - Player p = null; - try { - p = Bukkit.getPlayer(args[2]); - } catch (Exception e) { - } - if (!MaybeOfflinePlayer.AllPlayers.containsKey(p.getUniqueId())) { - String message = "§cPlayer not found: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - if (p == null) { - String message = "§cPlayer is not online: " + args[2] + "§r"; - SendMessage(player, message); - return; - } - if (args[1].equalsIgnoreCase("savepos")) { - mp.SavedLocation = p.getLocation(); - } else if (args[1].equalsIgnoreCase("loadpos")) { - if (mp.SavedLocation != null) - p.teleport(mp.SavedLocation); - } else { - String message = "§cUsage: /u admin savepos|loadpos §r"; - SendMessage(player, message); - return; - } - // SendMessage(player, "Player " + p.getName() + - // " position saved/loaded.");s - } - - private static void DoUpdateDynmap(Player player, String[] args) { - // args[0] is "admin" - args[1] is "updatedynmap" - if (args.length == 2) { - String message = "§cUsage: /u admin updatedynmap §r"; - SendMessage(player, message); - return; - } - } - - private static Random random = new Random(); - - public static String KittyCannonMinigame = "KittyCannon"; - - private static void DoKittyCannon(Player player, String[] args) { - if (player == null) { - SendMessage(player, - "§cThis command can only be used by a player.§r"); - return; - } - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(player); - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) { - SendMessage(player, - "§cYou can only use KittyCannon in it's minigame!"); - return; - } - try { - final Mob cat = Mob.OCELOT; - final Ocelot ocelot = (Ocelot) cat.spawn(player.getWorld(), - player.getServer(), player.getEyeLocation()); - if (ocelot == null) { - return; - } - final ArrayList lore = new ArrayList<>(); - lore.add(player.getName()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); - ocelot.setTamed(true); - ocelot.setBaby(); - ocelot.addPotionEffect(new PotionEffect( - PotionEffectType.DAMAGE_RESISTANCE, 5, 5)); - ocelot.setVelocity(player.getEyeLocation().getDirection() - .multiply(2)); - Bukkit.getScheduler().scheduleSyncDelayedTask(PluginMain.Instance, - new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - final Location loc = ocelot.getLocation(); - ocelot.remove(); - loc.getWorld().createExplosion(loc, 0F); - final ItemStack head = new ItemStack( - Material.SKULL_ITEM, 1, (short) 3, (byte) 3); - SkullMeta im = (SkullMeta) head.getItemMeta(); - im.setDisplayName("§rOcelot Head"); - im.setOwner("MHF_Ocelot"); - im.setLore(lore); - head.setItemMeta(im); - loc.getWorld().dropItem(loc, head); - } - }, 20); - } catch (MobException e) { - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ff/a0790ee2cf3e001518fa86d7ae2a1cf8 b/.metadata/.plugins/org.eclipse.core.resources/.history/ff/a0790ee2cf3e001518fa86d7ae2a1cf8 deleted file mode 100644 index 38374ce..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ff/a0790ee2cf3e001518fa86d7ae2a1cf8 +++ /dev/null @@ -1,196 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor { - // This method is called, when somebody uses our command - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; - if(args.length<1) - return false; - MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. - //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) - if(p.Flair==null) - { - player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); - return true; - } - switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. - { - case "accept": - { - if(p.IgnoredFlair) - p.IgnoredFlair=false; //2015.08.08. - if(!p.AcceptedFlair) - { - String flair=p.Flair; //2015.08.08. - PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - p.AcceptedFlair=true; //2015.08.08. - player.sendMessage("§6Your flair has been set:§r "+flair); - } - else - player.sendMessage("§cYou already have this user's flair.§r"); - break; - } - case "ignore": - { - if(p.AcceptedFlair) - p.AcceptedFlair=false; //2015.08.08. - if(!p.IgnoredFlair) - { - p.IgnoredFlair=true; - String flair=p.Flair; //2015.08.08. - PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. - player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); - } - else - player.sendMessage("§cYou already ignored this request.§r"); - break; - } - /*case "reload": //2015.07.20. - DoReload(player); - break;*/ - case "admin": //2015.08.09. - DoAdmin(player, args); - break; - case "nonpresser": //2015.08.09. - break; - default: - return false; - } - return true; - } - /*if(args[0].toLowerCase()=="reload") - DoReload(null); //2015.07.20.*/ - else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. - { - DoAdmin(null, args); //2015.08.09. - return true; //2015.08.09. - } - return false; - } - private static void DoReload(Player player) - { //2015.07.20. - //if(player==null || player.isOp() || player.getName()=="NorbiPeti") - //{ - try - { - File file=new File("autoflairconfig.txt"); - if(file.exists()) - { - PluginMain.TownColors.clear(); - BufferedReader br=new BufferedReader(new FileReader(file)); - String line; - while((line=br.readLine())!=null) - { - String[] s=line.split(" "); - PluginMain.TownColors.put(s[0], s[1]); - } - br.close(); - for(Player p : PluginMain.GetPlayers()) - { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); - if(mp.Flair!=null) - { - String flair=mp.Flair; - PluginMain.RemovePlayerDisplayFlairFinal(p, flair); - PluginMain.AppendPlayerDisplayFlairFinal(p, flair); - } - } - String msg="§6Reloaded config file.§r"; - SendMessage(player, msg); //2015.08.09. - } - } - catch(Exception e) - { - System.out.println("Error!\n"+e); - if(player!=null) - player.sendMessage("§cAn error occured. See console for details.§r"); - PluginMain.LastException=e; //2015.08.09. - } - //} - //else - //player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoAdmin(Player player, String[] args) - { //2015.08.09. - if(player==null || player.isOp() || player.getName()=="NorbiPeti") - { - //System.out.println("Args length: " + args.length); - if(args.length==1) - { - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - //args[0] is "admin" - switch(args[1].toLowerCase()) - { - case "reload": - DoReload(player); - break; - case "playerinfo": - DoPlayerInfo(player, args); - break; - case "getlasterror": - DoGetLastError(player, args); - default: - String message="§cUsage: /u admin reload|playerinfo§r"; - SendMessage(player, message); - return; - } - } - else - player.sendMessage("§cYou need to be OP to use this command.§r"); - } - private static void DoPlayerInfo(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "playerinfo" - if(args.length==2) - { - String message="§cUsage: /u admin playerinfo §r"; - SendMessage(player, message); - return; - } - if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) - { - String message="§cPlayer not found: "+args[2]+"§r"; - SendMessage(player, message); - return; - } - MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); - SendMessage(player, "Player name: "+p.PlayerName); - SendMessage(player, "User flair: "+p.Flair); - SendMessage(player, "Username: "+p.UserName); - SendMessage(player, "Flair accepted: "+p.AcceptedFlair); - SendMessage(player, "Flair ignored: "+p.IgnoredFlair); - } - private static void SendMessage(Player player, String message) - { //2015.08.09. - if(player==null) - System.out.println(message); - else - player.sendMessage(message); - } - private static void DoGetLastError(Player player, String[] args) - { //2015.08.09. - //args[0] is "admin" - args[1] is "getlasterror" - if(PluginMain.LastException!=null) - { - SendMessage(player, "Last error:"); - SendMessage(player, PluginMain.LastException.toString()); - PluginMain.LastException=null; - } - else - SendMessage(player, "There were no exceptions."); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ff/a07a53fd4ca600151c15ab42d7919fee b/.metadata/.plugins/org.eclipse.core.resources/.history/ff/a07a53fd4ca600151c15ab42d7919fee deleted file mode 100644 index ba645f8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ff/a07a53fd4ca600151c15ab42d7919fee +++ /dev/null @@ -1,366 +0,0 @@ -package tk.sznp.thebuttonautoflair; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -import au.com.mineauz.minigames.MinigamePlayer; -import au.com.mineauz.minigames.Minigames; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; - -public class PlayerListener implements Listener { // 2015.07.16. - public static HashMap nicknames = new HashMap<>(); - - public static boolean Enable = false; // 2015.08.29. - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player p = event.getPlayer(); - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); - mp.PlayerName = p.getName(); // 2015.10.17. 0:58 - if (!mp.FlairState.equals(FlairStates.NoComment)) - // if (false) - PluginMain.ConfirmUserMessage(mp); // 2015.08.09. - else { // 2015.07.20. - Timer timer = new Timer(); - PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { - @Override - public void run() { - if (mp.FlairState.equals(FlairStates.NoComment)) { - String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Console, - "tellraw " + mp.PlayerName + " " + json); - } - } - }; - tt.mp = mp; - timer.schedule(tt, 15 * 1000); - } - - /* NICKNAME LOGIC */ - - UUID id = p.getUniqueId(); - - File f = new File("plugins/Essentials/userdata/" + id + ".yml"); - if (f.exists()) { - YamlConfiguration yc = new YamlConfiguration(); - try { - yc.load(f); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - String nickname = yc.getString("nickname"); - if (nickname != null) { - nicknames.put(nickname, id); - - if (Enable) { - if (!p.getName().equals("NorbiPeti")) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.chat("Hey, " + nickname + "!"); - break; - } - } - } - } - } - } - - mp.RPMode = true; // 2015.08.25. - - mp.SetFlairColor(mp.GetFlairColor()); //Update display - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - String deletenick = null; - for (String nickname : nicknames.keySet()) { - UUID uuid = nicknames.get(nickname); - if (event.getPlayer().getUniqueId().equals(uuid)) { - deletenick = nickname; - break; - } - } - if (deletenick != null) - nicknames.remove(deletenick); - } - - public static String NotificationSound; // 2015.08.14. - public static double NotificationPitch; // 2015.08.14. - - public static boolean ShowRPTag = false; // 2015.08.31. - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) { - MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event - .getPlayer().getUniqueId()); - String flair = player.GetFormattedFlair(); - String message = event.getMessage(); // 2015.08.08. - for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. - String color = ""; // 2015.08.17. - if (message.contains(p.getName())) { - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p - .getUniqueId()); // 2015.08.17. - color = String.format("§%x", (mp.GetFlairColor() == 0x00 ? 0xb - : mp.GetFlairColor())); // TODO: Quiz queue - } - - message = message.replace(p.getName(), color + p.getName() - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - for (String n : nicknames.keySet()) { - Player p = null; - String nwithoutformatting = new String(n); - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (message.contains(nwithoutformatting)) { - p = Bukkit.getPlayer(nicknames.get(n)); - if (NotificationSound == null) - p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. - else - p.playSound(p.getLocation(), NotificationSound, 1.0f, - (float) NotificationPitch); // 2015.08.14. - MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. - } - if (p != null) { - message = message.replace(nwithoutformatting, n - + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); - } - } - - event.setMessage(message); // 2015.09.05. - - event.setFormat(event - .getFormat() - .replace( - "{rptag}", - (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") - : "§8[OOC]§r")) - .replace("{buttonflair}", flair) - .replace( - "{isitwilds}", - (event.getPlayer().getWorld().getName() - .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. - } - - @EventHandler - public void onTabComplete(PlayerChatTabCompleteEvent e) { - String name = e.getLastToken(); - for (String nickname : nicknames.keySet()) { - String nwithoutformatting = nickname; - int index; - while ((index = nwithoutformatting.indexOf("§k")) != -1) - nwithoutformatting = nwithoutformatting.replace("§k" - + nwithoutformatting.charAt(index + 2), ""); // Support - // for - // one - // random - // char - while ((index = nwithoutformatting.indexOf('§')) != -1) - nwithoutformatting = nwithoutformatting.replace("§" - + nwithoutformatting.charAt(index + 1), ""); - if (nwithoutformatting.startsWith(name) - && !nwithoutformatting.equals(Bukkit.getPlayer( - nicknames.get(nickname)).getName())) - e.getTabCompletions().add(nwithoutformatting); - } - } - - public static boolean DebugMode = false; - - public void SendForDebug(String message) { - if (DebugMode) { - for (Player player : PluginMain.GetPlayers()) { - if (player.getName().equals("NorbiPeti")) { - player.sendMessage("[DEBUG] " + message); - break; - } - } - } - } - - private boolean ActiveF = false; - private int FCount = 0; - - @EventHandler - public void onPlayerMessage(AsyncPlayerChatEvent e) { - if (e.getMessage().equalsIgnoreCase("F")) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e - .getPlayer().getUniqueId()); - if (!mp.PressedF && ActiveF) { - FCount++; - mp.PressedF = true; - } - } - - if (e.getMessage().startsWith(">")) - e.setMessage("§2" + e.getMessage()); - - if (e.getMessage().equalsIgnoreCase("lol")) - Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(e.getPlayer() - .getUniqueId()); - - if (e.getFormat().contains("[g]")) { - StringBuilder sb = new StringBuilder(); - sb.append("tellraw @a [\"\""); - sb.append(",{\"text\":\"Hashtags:\"}"); - int index = -1; - ArrayList list = new ArrayList(); - while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { - int index2 = e.getMessage().indexOf(" ", index + 1); - if (index2 == -1) - index2 = e.getMessage().length(); - int index3 = e.getMessage().indexOf("#", index + 1); - if (index3 != -1 && index3 < index2) // A # occurs before a - // space - index2 = index3; - String original = e.getMessage().substring(index, index2); - list.add(original); - sb.append(",{\"text\":\" \"}"); - sb.append(",{\"text\":\""); - sb.append(original); - sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); - sb.append(original.substring(1)); - sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); - } - for (String original : list) - e.setMessage(e.getMessage().replace( - original, - "§9" - + original - + (e.getMessage().startsWith("§2>") ? "§2" - : "§r"))); - /* - * for (String original : list) - * System.out.println(e.getMessage().replace( original, "§9" + - * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); - */ - - sb.append("]"); - - if (list.size() > 0) - PluginMain.Instance.getServer().dispatchCommand( - PluginMain.Instance.getServer().getConsoleSender(), - sb.toString()); - } - } - - private Timer Ftimer; - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) - .isInMinigame() && new Random().nextBoolean()) { - if (Ftimer != null) - Ftimer.cancel(); - ActiveF = true; - FCount = 0; - for (Player p : PluginMain.GetPlayers()) { - MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p - .getUniqueId()); - mp.PressedF = false; - p.sendMessage("§bPress F to pay respects.§r"); - } - Ftimer = new Timer(); - TimerTask tt = new TimerTask() { - @Override - public void run() { - if (ActiveF) { - ActiveF = false; - for (Player p : PluginMain.GetPlayers()) { - p.sendMessage("§b" + FCount + " " - + (FCount == 1 ? "person" : "people") - + " paid their respects.§r"); - } - } - } - }; - Ftimer.schedule(tt, 15 * 1000); - } - } - - @EventHandler - public void onPlayerItemPickup(PlayerPickupItemEvent e) { - // System.out.println("A"); - MinigamePlayer mp = Minigames.plugin.pdata.getMinigamePlayer(e - .getPlayer()); - // System.out.println("B"); - - /* - * if (!e.getPlayer().isOp() && (!mp.isInMinigame() || - * mp.getMinigame().getName(false) - * .equalsIgnoreCase(Commands.KittyCannonMinigame))) return; - */ - if (!(mp.isInMinigame() && mp.getMinigame().getName(false) - .equalsIgnoreCase(Commands.KittyCannonMinigame))) - return; - // System.out.println("C"); - ItemStack item = e.getItem().getItemStack(); - if (!item.getType().equals(Material.SKULL_ITEM) - && !item.getType().equals(Material.SKULL)) - return; - // System.out.println("D"); - SkullMeta meta = (SkullMeta) item.getItemMeta(); - if (!meta.getDisplayName().equals("§rOcelot Head") - || !meta.getOwner().equals("MHF_Ocelot")) - return; - // System.out.println("E"); - if (meta.getLore() == null || meta.getLore().size() == 0) - return; - // System.out.println("F"); - ItemStack hat = e.getPlayer().getInventory().getHelmet(); - if (!(hat != null - && (hat.getType().equals(Material.SKULL) || hat.getType() - .equals(Material.SKULL_ITEM)) && ((SkullMeta) hat - .getItemMeta()).getDisplayName().equals("§rWolf Head"))) - e.getPlayer().damage(1f * item.getAmount(), - Bukkit.getPlayer(meta.getLore().get(0))); - e.getItem().remove(); - // System.out.println("G"); - e.setCancelled(true); - // System.out.println("H"); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap deleted file mode 100644 index 6fe4a90514f5960d1c79732b57fa568c96c076c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 bcmZ?R*xjhShe1S2b=vdAllRFv3^6_cVn$Hu diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap deleted file mode 100644 index 6fe4a90514f5960d1c79732b57fa568c96c076c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 bcmZ?R*xjhShe1S2b=vdAllRFv3^6_cVn$Hu diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.indexes/e4/77/69/e/history.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.indexes/e4/77/69/e/history.index deleted file mode 100644 index 8ec48cc33568d34f87cf6bf95509114c42f16817..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102 zcmZQ#U|?Wm(A6(4O4cvQ)-SHgE6^{=NKGm&Dap@EEG@}T%Sp^E(s$0!%}vZpDb~wM tEK6iynsDy8+}e2zqLRAn#c!vpFl^;1 zUSg?&X>{BooQr7^_94-eM&)5qCXbroGP{@Bg)nb-tR+tBE8~s`ziSQOHnh;t js|m*JVwo2FIj~oI)IuybCzsyhzQa*oF1db`heY-Ul1w~m diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers deleted file mode 100644 index 879741627ce85999e27e54c6351a3915ff497942..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1129 zcmbW0L2DC16vtmSVAI-@A}B%`utEhpYY$Q=3MS2p4NY2Y)I*Un*?rAUGdr`)%vP&+ z>B)m9KZ$oe_zk@KHN5$DD<)0TiwgrgyKmqXc@a4#wevzLOz4gI z6xmy2M=lpJ(oFcO)_E&quTEHOGHNLYipnIl_Nk<<<6fLW!{ISn=}!VOS%Zc$F|9DV z4hv(=^ym3$`}Z|y&0rKd8;5=ry7xK{NztG}CjInZDQH7C`P%F+W&<*5A$&LMd|sGAMw&Nzv%hHl;{2N9Og>>kxokW zKVWH6&YAa0Ich83FsOZ>pntW$)85%&FSRlX8o8Bbe2u0K?OSz$qT5&g0FW+lIsgCw diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap deleted file mode 100644 index bd101777fe6b3d86d15dc69fd2caf54078f48a5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14454 zcmeI3Yiu0V6@ahTAe=OzK@LhBPONI={w5R+1Yc(g$InUq!nQA&6iLRw1Ob7#ldxtp=a z8Bda3m6g`=?mX@}-#Pc(Gv}V|*th$Rrr)83OIjZO__4hQmLh~=s6IZJC0#b>)aMSx$n9fIHpkxiIGiVyFpk^(aTap=$Y<_V;^H1TF80zrh6t`G9&U10= zHnR{1sZtI`6)pLpjtmWklhsl|ywP9kp4SbZfP! zwr9g2nv>3|Y=EnbgSdjU=B)tP@1B(XEE#ui zbr`p!Gw&Mrp{g@(QTAx!)wwQ(XJhDM-*{DE6e3U_&5;9YZ2Aax`6u3pb@?$gM`c5{ zSOu(F^y9X~Cc_@m&8-DZicBT>ZhjF;?KNVHC!xdbxC_-bhIf&sXJYy#&j8WDq@&Up)Zan#hjl%XK1270D*zfLT zBwj5iv9OH9(~*<7tUb{QnhrUcPyeK8O8}ZmNBvk_=g*>ak!VY=Z2D6A=RZ6juBdzEW1Ibc>l-8Z{9mge)(oq zgzK?$SB%dHP*fhIucroOO+2TF z!i#cp;YI0HM^dCelM$s2Pi75M?;1}|xkhBxkcmQx>f{TQ(nuoX77rN1x+RKA1t1Ouf%q&8h{YFrK`fTnv&x(r ze+U9`G!%&IBoJGxz$4xW0`Yk$5O+u*c2@z2w}L=?5emdh5{U6C0P)8l5MPD@aa00v zyb3_P7X;#~Fd!N(^@3<(3D#FAJQfH)ik;_EOVmeflitZ0-;JED$yVQ8ie87P#E5q zFdUXJRAyHBQ4omZVL)7Ty%)qqw^RX$PlG`GGZcv5OCa8sKvd$yn3xK~bHxX6v^0j4 z^8HHNEf--cyFdyA=UqK2M!T1sLl z?ti+iD?OdpcWz5=O!g-G2De??*|%Y1a$EO?TGV?LEE{E=IHJR3-PDDS+lw2aC+adc zl|FlIIPW#I)GJO=cSmw!iXBp|rl!2Ap?eA?YXu^lI>E@@p%ug8n?#Kzf!ltz`exCD zkcE@9Uc$3fTee*8a`B9+Lubo{UWr6ok#ih1`F^bw+hbsFvro-KXHm=4Ox(?3AslSv z_3gRgh5MX}YjmwDwQgPKU(uGn>eqX1R^KblyUL8jcTF|(#$80;g$Y3QSqTKI0uZ}` zK>WKpYRGj&ST2ToLez+TYN&GGTT5NE6J|a%2$VYC=6@;q$@%Sx)~3>y`sB9q$DXkE zOYgQahJHj&bHv1rt&Od?bS3mFLhB-QqF^<{iRiX~aV^xrU{C%#Prk(EGHVD3|s4ZzUi zcJiKDFH>c10fKSgb&dOd7~?M3=QZwvu}U{C8lBR(K^uL(&AQQS{1wTgACl@HlIj?W zE~$3is^!)*YFVBUM~pFi_RSwr@_o*tXsCR63(#+nUNPww1fw{{U<#QBME> diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap deleted file mode 100644 index 6fe4a90514f5960d1c79732b57fa568c96c076c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 bcmZ?R*xjhShe1S2b=vdAllRFv3^6_cVn$Hu diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version b/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version deleted file mode 100644 index 25cb955..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index deleted file mode 100644 index c0ff3a4222e16884a016c5c04ebfe73483315a95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 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 diff --git a/.metadata/.plugins/org.eclipse.core.resources/98.snap b/.metadata/.plugins/org.eclipse.core.resources/98.snap deleted file mode 100644 index a06a9af42ad11ef9bc09aa0c0686574906b3d100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12536 zcmeI2U2I%O6~||7$01JQ*v^-orb+Mzv1`__p*uCyZeus8O4KxI;x>ICX|C5d$;SI( z?XFGSN+1FvloTGC#6}2^Dhdz0RFx_rFI5FaAfPIxw0+=#2uMpo&_bK$14@DanK|Pf z@4b6>Q~S+15BFYM=Qn5W+;h&HnVs!Vo&G}GGh)q#j;S}kd*<0qHPuyBLWx|f@8;Tm z8c#K1O*(V5$BiZ8V_CN+=Q_!r*hE&W&bY~R&JAbWYmxP5TQ^=Gz}ed2gh@{bZTHc zm%cOM#52`ZqB@(2Rfj}XZWPy=>_e$B+?#U8++n5aK=p`H4T<%;oylQ$&ygdEc*@3^vROAvwlO|{ z#UR65UeZAHqQ28L`Yu{Oo=vBG71^3nywoI?-Ld2D9@Rc+4{)>X{2}FP=;8k)^l?|* zkxq}sT`$n~HY+vZZh$pHG-%-NcsAz){ga_a3xdVEyM~7L`l!Ff>J64U>@|}5PDtb#lY%nVs@U0xnsF_I_1OtmARD`2fHhX z+wC*XZErBJ!UAA)EdhImkGrv4`#s}{gpaA$nOts>FxyZdeW2GEs5Ra{KS-yTUHk zi?su(RC+uWb2CH7GOjb?Gn_Ow5Q#CHeF2OB!atdGQX|>+h!<-8yJAH2e-?zdFF@OT zpnqsc(lD8!!m!mFOFoFn8$=oe9c@$zeLqbQSsyB`4MqQJQFyH1}*?{*ML2c8i`icBSK~p?DIXz{!sK^!5PL?^!guu};&JeKxq5Hi&WM=tN>7r52Tm|bH`C0D zYjG{EVRSP>wEq-Oi#Od>iBhgLbJ_VB4-&c7SM>8)e8%7eIdi$!VU7~yw0?dtvM?^$ ztecbJN?fwm@-B}{&RibO=*E;w(%KFpard|+RbzU|322xVvCI@y$V24D0H3uG(lvIP zyeZhHi@j8$K~(mp6$*rk*Rt6gU%{Z1y$y;Av`qH4K+4_*49zFR$d9gv7?u}Bn<_I` zPHn}|kWh&6O7!fv%7)n0Cyr=L)ga%{&ksJaFd?=Sf)S3Ng4miNxI# zVzj>F5SxY6HXSXn3A!;T#IBtB6RXk9*ufS}ah!NV?CSRrP9!SCXzu_*3*2JVQ?Snz zPzo`F)|3yi0!Sfdz^eI#7?o;^H^f3^=A`_RZixXRp*iW>`tk5H3llJ#b#wCON&=>W zq8+_`PB*E1(o|tc#btfcLdho$3KuJr_AQWn(tu0n;gcQY*o)aG%kQe^>)t%4zqHy_ zr!5>v>*EXKmz}yf*qgMlFhpX0DCgR>PybRYN6EEU>1W#S4cJ&gSMv zY`?A7khykz6;F%TOKM84NAq1_RHRC%SU#;E&;CVJ@atuM>uUpAU-=b6pQP=na)oxj zLwsNBs=DDj`uXrLkVULL*|}RX`OZIZZW7J#+n;FWj8Yab=*se0AS_MNqAXyN*2-(C3OLVe`$BX)hNs0FVxiJiK{W9s4-$pg z8U1{2Dj-w}M+x$gTiJif{fx*PJm-?2XeQnpj2e7)qyM?2eB?G>aL7+V8~K<-!c>WK zNdS(s(kF2@0G2z5BRa_BcPb-`ax1(I~IhTZn2Uw#Uck=@1SHQU>KxmFc-h_*R z(6c$`k`TibjSy+oFS6NlE(waf(IA^OprDpA=aMW8<**UCq5QcdynvbBy1<4moDF<$uUN@T6QqHLFbb2O5}kM*@26B zCA3iTToMrSKZtC{#UOaOO4bRHe)2>J{a8HF{aUt;v&KO86y2F z6e;8u3q>=^24|otLT5ZRYs)mkBSp=vjw6Nd%57#)xO^_w$Z{i&Bc7W z+4l-#P@V1O7I>$%1}-`$mXGwk#L$fvwE21o^g$142dpxBr|b1tt5wD~_4BzO1a4Bu z&m3X~Ij;6O{rpAD>mO*NttiWzh`@ASexogTh0#0xyzZOIa?AM{(`O+ydOfyx`d6$- zS\r\n\r\n -preferredTargets=default\:default| diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.base.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.base.prefs deleted file mode 100644 index baf7806..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.base.prefs +++ /dev/null @@ -1,6 +0,0 @@ -always_external_browser=false -dialog_infopop=false -eclipse.preferences.version=1 -help_view_open_mode=in_place -search_from_browser=false -window_infopop=false diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index bee14ad..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.builder.resourceCopyExclusionFilter= -org.eclipse.jdt.core.codeComplete.visibilityCheck=enabled diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs deleted file mode 100644 index e15346f..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.launching.PREF_VM_XML=\r\n\r\n\r\n\r\n\r\n\r\n diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 661b623..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,21 +0,0 @@ -content_assist_disabled_computers=org.eclipse.jdt.ui.textProposalCategory\u0000org.eclipse.jdt.ui.javaAllProposalCategory\u0000org.eclipse.jdt.ui.javaTypeProposalCategory\u0000org.eclipse.jdt.ui.javaNoTypeProposalCategory\u0000 -content_assist_lru_history= -content_assist_number_of_computers=21 -content_assist_proposals_background=255,255,255 -content_assist_proposals_foreground=0,0,0 -eclipse.preferences.version=1 -fontPropagated=true -markOccurrences=false -org.eclipse.jdt.ui.editor.tab.width= -org.eclipse.jdt.ui.formatterprofiles.version=12 -org.eclipse.jdt.ui.javadoclocations.migrated=true -org.eclipse.jdt.ui.text.code_templates_migrated=true -org.eclipse.jdt.ui.text.custom_code_templates= -org.eclipse.jdt.ui.text.custom_templates= -org.eclipse.jdt.ui.text.templates_migrated=true -org.eclipse.jface.textfont=1|Consolas|10.0|0|WINDOWS|1|0|0|0|0|0|0|0|0|1|0|0|0|0|Consolas; -proposalOrderMigrated=true -spelling_locale_initialized=true -tabWidthPropagated=true -useAnnotationsPrefPage=true -useQuickDiffPrefPage=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.j2ee.webservice.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.j2ee.webservice.ui.prefs deleted file mode 100644 index 553bb96..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.j2ee.webservice.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -areThereWebServices=false -eclipse.preferences.version=1 diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.jsp.core.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.jsp.core.prefs deleted file mode 100644 index 66f87be..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.jsp.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jst.jsp.core.taglib.TaglibIndex=CLEAN diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs deleted file mode 100644 index 67b1d96..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.m2e.discovery.pref.projects= diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs deleted file mode 100644 index 43e97e4..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -mylyn.attention.migrated=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.java.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.java.ui.prefs deleted file mode 100644 index 2a6fe50..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.java.ui.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.mylyn.java.ui.run.count.3_10_0=1 -org.eclipse.mylyn.java.ui.run.count.3_1_0=1 diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs deleted file mode 100644 index 8d462a6..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.mylyn.monitor.activity.tracking.enabled.checked=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs deleted file mode 100644 index 5330e43..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -migrated.task.repositories.secure.store=true -org.eclipse.mylyn.tasks.ui.filters.nonmatching=true -org.eclipse.mylyn.tasks.ui.filters.nonmatching.encouraged=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.api.tools.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.api.tools.prefs deleted file mode 100644 index d2ed603..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.api.tools.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -knownEEFragments= diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.core.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.core.prefs deleted file mode 100644 index 888c64d..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -workspace_target_handle=local\:1449259517199.target diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.ui.prefs deleted file mode 100644 index 643105e..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -Preferences.MainPage.overwriteBuildFilesOnExport=prompt -eclipse.preferences.version=1 diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.core.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.core.prefs deleted file mode 100644 index c27d8a2..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeuserprofiles=NORBI-PC;Team -eclipse.preferences.version=1 -org.eclipse.rse.systemtype.local.systemType.defaultUserId=Norbi -useridperkey=NORBI-PC.Local\=Norbi; diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.ui.prefs deleted file mode 100644 index 777efa3..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.rse.preferences.order.connections=NORBI-PC.Local diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs deleted file mode 100644 index cec65c4..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.search.defaultPerspective=org.eclipse.search.defaultPerspective.none diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs deleted file mode 100644 index f9e585b..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -pref_first_startup=false diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs deleted file mode 100644 index 56cd496..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.team.ui.first_time=false diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs deleted file mode 100644 index 61f3bb8..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -overviewRuler_migration=migrated_3.1 diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs deleted file mode 100644 index 3d09974..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs +++ /dev/null @@ -1,8 +0,0 @@ -IMPORT_FILES_AND_FOLDERS_RELATIVE=true -IMPORT_FILES_AND_FOLDERS_TYPE=23,1 -PROBLEMS_FILTERS_MIGRATE=true -TASKS_FILTERS_MIGRATE=true -eclipse.preferences.version=1 -platformState=1449250075322 -quickStart=false -tipsAndTricks=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs deleted file mode 100644 index 08076f2..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -showIntro=false diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs deleted file mode 100644 index ad74de0..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs +++ /dev/null @@ -1,4 +0,0 @@ -//org.eclipse.ui.commands/state/org.eclipse.wst.xml.views.XPathView.processor.xpathprocessor/org.eclipse.ui.commands.radioState=xpath10 -ENABLED_DECORATORS=org.eclipse.jst.ws.jaxws.dom.integration.navigator.WebServiceDecorator\:true,org.eclipse.wst.server.ui.decorator\:false,com.android.ide.eclipse.adt.project.FolderDecorator\:true,org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.DependencyDecoration\:true,org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.ColumnDecoration\:true,org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.ForeignKeyDecoration\:true,org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.IndexTriggerDecoration\:true,org.eclipse.datatools.connectivity.internal.core.ui.bookmarkDecoration\:true,org.eclipse.datatools.connectivity.internal.core.ui.FilterNodeDecoration\:true,org.eclipse.datatools.connectivity.ui.decorator.contentextension\:false,org.eclipse.datatools.enablement.ingres.ui.providers.decorators.SynonymDecorationService\:true,org.eclipse.datatools.enablement.ingres.internal.ui.providers.decorators.ParameterDecorationService\:true,org.eclipse.datatools.enablement.sybase.asa.proxytabledecorator\:true,org.eclipse.datatools.enablement.sybase.ase.webservicetabledecorator\:true,org.eclipse.datatools.enablement.sybase.systemtabledecorator\:true,org.eclipse.egit.ui.internal.decorators.GitLightweightDecorator\:true,org.eclipse.jdt.ui.override.decorator\:true,org.eclipse.jdt.ui.interface.decorator\:false,org.eclipse.jdt.ui.buildpath.decorator\:true,org.eclipse.jst.j2ee.internal.ui.util.AnnotationIconDecorator_ejb\:true,org.eclipse.jst.j2ee.navigator.internal.J2EEProjectDecorator\:true,org.eclipse.jst.jee.ui.internal.navigator.ejb.BeanDecorator\:true,org.eclipse.jst.jee.navigator.internal.JEEProjectDecorator\:true,org.eclipse.jst.j2ee.internal.ui.util.AnnotationIconDecorator_servlet\:true,org.eclipse.jst.servlet.ui.Decorator\:true,org.eclipse.mylyn.context.ui.decorator.interest\:true,org.eclipse.mylyn.tasks.ui.decorators.task\:true,org.eclipse.mylyn.team.ui.changeset.decorator\:true,org.eclipse.pde.ui.binaryProjectDecorator\:false,org.eclipse.rse.core.virtualobject.decorator\:true,org.eclipse.rse.core.binary.executable.decorator\:true,org.eclipse.rse.core.script.executable.decorator\:true,org.eclipse.rse.core.java.executable.decorator\:true,org.eclipse.rse.core.library.decorator\:true,org.eclipse.rse.core.link.decorator\:true,org.eclipse.rse.subsystems.error.decorator\:true,org.eclipse.team.cvs.ui.decorator\:true,org.eclipse.ui.LinkedResourceDecorator\:true,org.eclipse.ui.VirtualResourceDecorator\:true,org.eclipse.ui.ContentTypeDecorator\:true,org.eclipse.ui.ResourceFilterDecorator\:false,org.eclipse.wst.jsdt.ui.override.decorator\:true,org.eclipse.wst.server.ui.navigatorDecorator\:true, -PLUGINS_NOT_ACTIVATED_ON_STARTUP=org.eclipse.m2e.discovery; -eclipse.preferences.version=1 diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.jsdt.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.jsdt.ui.prefs deleted file mode 100644 index a092597..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.jsdt.ui.prefs +++ /dev/null @@ -1,10 +0,0 @@ -eclipse.preferences.version=1 -fontPropagated=true -org.eclipse.jface.textfont=1|Consolas|10.0|0|WINDOWS|1|0|0|0|0|0|0|0|0|1|0|0|0|0|Consolas; -org.eclipse.wst.jsdt.ui.editor.tab.width= -org.eclipse.wst.jsdt.ui.formatterprofiles.version=11 -org.eclipse.wst.jsdt.ui.javadoclocations.migrated=true -proposalOrderMigrated=true -tabWidthPropagated=true -useAnnotationsPrefPage=true -useQuickDiffPrefPage=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs deleted file mode 100644 index a23b194..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -task-tag-projects-already-scanned=RemoteSystemsTempFiles,TheButtonAutoFlair diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.ui.prefs deleted file mode 100644 index 5c6ef69..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.ui.prefs +++ /dev/null @@ -1,4 +0,0 @@ -content_assist_number_of_computers=18 -eclipse.preferences.version=1 -useAnnotationsPrefPage=true -useQuickDiffPrefPage=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.ws.service.policy.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.ws.service.policy.prefs deleted file mode 100644 index 6696959..0000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.ws.service.policy.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.wst.ws.service.policy.ui.servicepols.wsiprofilecomp.wsiap.defaultProtocol=http\://schemas.xmlsoap.org/wsdl/soap/ -org.eclipse.wst.ws.service.policy.ui.servicepols.wsiprofilecomp.wsissbp.defaultProtocol=http\://schemas.xmlsoap.org/wsdl/soap/ diff --git a/.metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml b/.metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml deleted file mode 100644 index bc1657f..0000000 --- a/.metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml +++ /dev/null @@ -1,18 +0,0 @@ - -
-
- - - -
-
- - - -
-
- - - -
-
diff --git a/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi deleted file mode 100644 index e963ea8..0000000 --- a/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ /dev/null @@ -1,3227 +0,0 @@ - - - - activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration - ModelMigrationProcessor.001 - - - - - - topLevel - shellMaximized - - - - - persp.actionSet:org.eclipse.mylyn.context.ui.actionSet - persp.actionSet:org.eclipse.mylyn.doc.actionSet - persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation - persp.actionSet:org.eclipse.ui.cheatsheets.actionSet - persp.actionSet:org.eclipse.rse.core.search.searchActionSet - persp.actionSet:org.eclipse.search.searchActionSet - persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo - persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet - persp.actionSet:org.eclipse.ui.actionSet.keyBindings - persp.actionSet:org.eclipse.ui.actionSet.openFiles - persp.actionSet:org.eclipse.jst.j2ee.J2eeMainActionSet - persp.actionSet:org.eclipse.jdt.ui.JavaActionSet - persp.actionSet:org.eclipse.debug.ui.launchActionSet - persp.actionSet:org.eclipse.debug.ui.debugActionSet - persp.actionSet:org.eclipse.ui.NavigateActionSet - persp.viewSC:org.eclipse.ui.navigator.ProjectExplorer - persp.viewSC:org.eclipse.wst.server.ui.ServersView - persp.viewSC:org.eclipse.datatools.connectivity.DataSourceExplorerNavigator - persp.viewSC:org.eclipse.ui.views.BookmarkView - persp.viewSC:org.eclipse.ui.views.ContentOutline - persp.viewSC:org.eclipse.ui.views.PropertySheet - persp.viewSC:org.eclipse.ui.views.ResourceNavigator - persp.viewSC:org.eclipse.wst.common.snippets.internal.ui.SnippetsView - persp.viewSC:org.eclipse.ui.views.AllMarkersView - persp.viewSC:org.eclipse.mylyn.tasks.ui.views.tasks - persp.viewSC:org.eclipse.search.ui.views.SearchView - persp.viewSC:org.eclipse.ui.console.ConsoleView - persp.showIn:org.eclipse.ui.navigator.ProjectExplorer - persp.newWizSC:org.eclipse.jpt.jpa.ui.wizard.newJpaProject - persp.perspSC:org.eclipse.jpt.ui.jpaPerspective - persp.perspSC:org.eclipse.debug.ui.DebugPerspective - persp.perspSC:org.eclipse.jdt.ui.JavaPerspective - persp.perspSC:org.eclipse.ui.resourcePerspective - persp.perspSC:org.eclipse.wst.web.ui.webDevPerspective - persp.newWizSC:org.eclipse.jst.j2ee.ui.project.facet.EarProjectWizard - persp.newWizSC:org.eclipse.jst.servlet.ui.project.facet.WebProjectWizard - persp.newWizSC:org.eclipse.jst.ejb.ui.project.facet.EjbProjectWizard - persp.newWizSC:org.eclipse.jst.j2ee.jca.ui.internal.wizard.ConnectorProjectWizard - persp.newWizSC:org.eclipse.jst.j2ee.ui.project.facet.appclient.AppClientProjectWizard - persp.newWizSC:org.eclipse.wst.web.ui.internal.wizards.SimpleWebProjectWizard - persp.newWizSC:org.eclipse.jpt.ui.wizard.newJpaProject - persp.newWizSC:org.eclipse.jst.servlet.ui.internal.wizard.AddServletWizard - persp.newWizSC:org.eclipse.jst.ejb.ui.internal.wizard.AddSessionBeanWizard - persp.newWizSC:org.eclipse.jst.ejb.ui.internal.wizard.AddMessageDrivenBeanWizard - persp.newWizSC:org.eclipse.jpt.ui.wizard.newEntity - persp.newWizSC:org.eclipse.jst.ws.creation.ui.wizard.serverwizard - persp.newWizSC:org.eclipse.ui.wizards.new.folder - persp.newWizSC:org.eclipse.ui.wizards.new.file - persp.actionSet:org.eclipse.wst.server.ui.internal.webbrowser.actionSet - persp.actionSet:org.eclipse.debug.ui.breakpointActionSet - persp.actionSet:org.eclipse.wst.ws.explorer.explorer - - - newtablook - - - - - - - - - - newtablook - - - - - - newtablook - - - - - - - - - - - - - - - - - - persp.actionSet:org.eclipse.mylyn.context.ui.actionSet - persp.actionSet:org.eclipse.mylyn.doc.actionSet - persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation - persp.actionSet:org.eclipse.ui.cheatsheets.actionSet - persp.actionSet:org.eclipse.rse.core.search.searchActionSet - persp.actionSet:org.eclipse.search.searchActionSet - persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo - persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet - persp.actionSet:org.eclipse.ui.actionSet.keyBindings - persp.actionSet:org.eclipse.ui.actionSet.openFiles - persp.actionSet:org.eclipse.debug.ui.launchActionSet - persp.actionSet:org.eclipse.jdt.ui.JavaActionSet - persp.actionSet:org.eclipse.jdt.ui.JavaElementCreationActionSet - persp.actionSet:org.eclipse.ui.NavigateActionSet - persp.viewSC:org.eclipse.jdt.ui.PackageExplorer - persp.viewSC:org.eclipse.jdt.ui.TypeHierarchy - persp.viewSC:org.eclipse.jdt.ui.SourceView - persp.viewSC:org.eclipse.jdt.ui.JavadocView - persp.viewSC:org.eclipse.search.ui.views.SearchView - persp.viewSC:org.eclipse.ui.console.ConsoleView - persp.viewSC:org.eclipse.ui.views.ContentOutline - persp.viewSC:org.eclipse.ui.views.ProblemView - persp.viewSC:org.eclipse.ui.views.ResourceNavigator - persp.viewSC:org.eclipse.ui.views.TaskList - persp.viewSC:org.eclipse.ui.views.ProgressView - persp.viewSC:org.eclipse.ui.navigator.ProjectExplorer - persp.viewSC:org.eclipse.ui.texteditor.TemplatesView - persp.viewSC:org.eclipse.pde.runtime.LogView - persp.newWizSC:org.eclipse.jdt.ui.wizards.JavaProjectWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewPackageCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewClassCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewInterfaceCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewEnumCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewAnnotationCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewSourceFolderCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewSnippetFileCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewJavaWorkingSetWizard - persp.newWizSC:org.eclipse.ui.wizards.new.folder - persp.newWizSC:org.eclipse.ui.wizards.new.file - persp.newWizSC:org.eclipse.ui.editors.wizards.UntitledTextFileWizard - persp.perspSC:org.eclipse.jdt.ui.JavaBrowsingPerspective - persp.perspSC:org.eclipse.debug.ui.DebugPerspective - persp.newWizSC:com.android.ide.eclipse.adt.project.NewProjectWizard - persp.newWizSC:com.android.ide.eclipse.editors.wizards.NewXmlFileWizard - persp.actionSet:adt.actionSet.wizards - persp.actionSet:adt.actionSet.avdManager - persp.actionSet:adt.actionSet.lint - persp.actionSet:adt.actionSet.refactorings - persp.perspSC:com.android.ide.eclipse.ddms.Perspective - persp.perspSC:com.android.ide.eclipse.hierarchyviewer.PixelPerfectPespective - persp.perspSC:com.android.ide.eclipse.hierarchyviewer.TreeViewPerspective - persp.viewSC:org.eclipse.ant.ui.views.AntView - persp.showIn:org.eclipse.egit.ui.RepositoriesView - persp.actionSet:org.eclipse.debug.ui.breakpointActionSet - persp.actionSet:org.eclipse.jdt.debug.ui.JDTDebugActionSet - persp.newWizSC:org.eclipse.jdt.junit.wizards.NewTestCaseCreationWizard - persp.actionSet:org.eclipse.jdt.junit.JUnitActionSet - persp.showIn:org.eclipse.jdt.ui.PackageExplorer - persp.showIn:org.eclipse.team.ui.GenericHistoryView - persp.showIn:org.eclipse.ui.views.ResourceNavigator - persp.showIn:org.eclipse.ui.navigator.ProjectExplorer - persp.viewSC:org.eclipse.mylyn.tasks.ui.views.tasks - persp.newWizSC:org.eclipse.mylyn.tasks.ui.wizards.new.repository.task - persp.perspSC:org.eclipse.wst.jsdt.ui.JavaPerspective - - - - newtablook - org.eclipse.e4.primaryNavigationStack - - - - - - - - newtablook - - - - - - - - - newtablook - - - - newtablook - org.eclipse.e4.secondaryNavigationStack - - - - - - - - newtablook - org.eclipse.e4.secondaryDataStack - - - - - - - - - - - - - - - - - - - - - View - categoryTag:Help - - ViewMenu - menuContribution:menu - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - View - categoryTag:Help - - - - newtablook - org.eclipse.e4.primaryDataStack - EditorStack - active - - - Editor - org.eclipse.jdt.ui.CompilationUnitEditor - removeOnHide - - menuContribution:popup - popup:#CompilationUnitEditorContext - popup:org.eclipse.jdt.ui.CompilationUnitEditor.EditorContext - popup:#AbstractTextEditorContext - - - menuContribution:popup - popup:#CompilationUnitRulerContext - popup:org.eclipse.jdt.ui.CompilationUnitEditor.RulerContext - popup:#AbstractTextEditorRulerContext - - - menuContribution:popup - popup:#OverviewRulerContext - - - - - Editor - org.eclipse.jdt.ui.CompilationUnitEditor - removeOnHide - - menuContribution:popup - popup:#CompilationUnitEditorContext - popup:org.eclipse.jdt.ui.CompilationUnitEditor.EditorContext - popup:#AbstractTextEditorContext - - - menuContribution:popup - popup:#CompilationUnitRulerContext - popup:org.eclipse.jdt.ui.CompilationUnitEditor.RulerContext - popup:#AbstractTextEditorRulerContext - - - menuContribution:popup - popup:#OverviewRulerContext - - - - - Editor - org.eclipse.jdt.ui.CompilationUnitEditor - removeOnHide - - - - Editor - org.eclipse.ui.DefaultTextEditor - removeOnHide - - menuContribution:popup - popup:#TextEditorContext - popup:org.eclipse.ui.DefaultTextEditor.EditorContext - popup:#AbstractTextEditorContext - - - menuContribution:popup - popup:#TextRulerContext - popup:org.eclipse.ui.DefaultTextEditor.RulerContext - popup:#AbstractTextEditorRulerContext - - - menuContribution:popup - popup:#OverviewRulerContext - - - - - Editor - org.eclipse.jdt.ui.CompilationUnitEditor - removeOnHide - active - - menuContribution:popup - popup:#CompilationUnitEditorContext - popup:org.eclipse.jdt.ui.CompilationUnitEditor.EditorContext - popup:#AbstractTextEditorContext - - - menuContribution:popup - popup:#CompilationUnitRulerContext - popup:org.eclipse.jdt.ui.CompilationUnitEditor.RulerContext - popup:#AbstractTextEditorRulerContext - - - menuContribution:popup - popup:#OverviewRulerContext - - - - - Editor - org.eclipse.jdt.ui.CompilationUnitEditor - removeOnHide - - menuContribution:popup - popup:#CompilationUnitEditorContext - popup:org.eclipse.jdt.ui.CompilationUnitEditor.EditorContext - popup:#AbstractTextEditorContext - - - menuContribution:popup - popup:#CompilationUnitRulerContext - popup:org.eclipse.jdt.ui.CompilationUnitEditor.RulerContext - popup:#AbstractTextEditorRulerContext - - - menuContribution:popup - popup:#OverviewRulerContext - - - - - Editor - org.eclipse.jdt.ui.CompilationUnitEditor - removeOnHide - - - - Editor - org.eclipse.m2e.editor.MavenPomEditor - removeOnHide - - - - Editor - org.eclipse.jdt.ui.CompilationUnitEditor - removeOnHide - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - View - categoryTag:General - - - View - categoryTag:Java - - ViewMenu - menuContribution:menu - - - - - View - categoryTag:Java Browsing - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - View - categoryTag:General - - - View - categoryTag:Server - - - View - categoryTag:Data Management - - - View - categoryTag:General - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - menuContribution:popup - popup:org.eclipse.ui.views.ProblemView - popup:org.eclipse.ui.ide.MarkersView - - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - menuContribution:popup - popup:org.eclipse.ui.views.TaskList - popup:org.eclipse.ui.ide.MarkersView - - - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - View - categoryTag:Mylyn - - ViewMenu - menuContribution:menu - - - - - - View - categoryTag:Java - - ViewMenu - menuContribution:menu - - - menuContribution:popup - popup:org.eclipse.jdt.ui.PackageExplorer - - - - - - View - categoryTag:Java - - ViewMenu - menuContribution:menu - - - - - - View - categoryTag:Java - - ViewMenu - menuContribution:menu - - - - - View - categoryTag:General - - - View - categoryTag:Ant - - - View - categoryTag:Git - - - View - categoryTag:Java - - - - toolbarSeparator - - - - Draggable - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - - toolbarSeparator - - - - Draggable - - - Draggable - - - Draggable - - - Draggable - - - Draggable - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - - Draggable - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - - Draggable - - - Draggable - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - - Draggable - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - - Draggable - - - Draggable - - - toolbarSeparator - - - - Draggable - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - Opaque - - - - Opaque - - - Opaque - - - Opaque - - - - Draggable - - - Draggable - - - toolbarSeparator - - - - toolbarSeparator - - - - Draggable - - Opaque - - - Opaque - - - - stretch - SHOW_RESTORE_MENU - - - Draggable - HIDEABLE - SHOW_RESTORE_MENU - - - - - stretch - - - - Draggable - - - - - TrimStack - - - - - TrimStack - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - platform:win32 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Editor - - - View - categoryTag:Ant - - - View - categoryTag:Data Management - - - View - categoryTag:Data Management - - - View - categoryTag:Data Management - - - View - categoryTag:Debug - - - View - categoryTag:Debug - - - View - categoryTag:Debug - - - View - categoryTag:Debug - - - View - categoryTag:Debug - - - View - categoryTag:Debug - - - View - categoryTag:Debug - - - View - categoryTag:Git - - - View - categoryTag:Git - - - View - categoryTag:Git - - - View - categoryTag:Git - - - View - categoryTag:General - - - View - categoryTag:Help - - - View - categoryTag:Debug - - - View - categoryTag:Java - - - View - categoryTag:Java - - - View - categoryTag:Java - - - View - categoryTag:Java Browsing - - - View - categoryTag:Java Browsing - - - View - categoryTag:Java Browsing - - - View - categoryTag:Java Browsing - - - View - categoryTag:Java - - - View - categoryTag:General - - - View - categoryTag:Java - - - View - categoryTag:Java - - - View - categoryTag:JPA - - - View - categoryTag:JPA - - - View - categoryTag:JavaServer Faces - - - View - categoryTag:JavaServer Faces - - - View - categoryTag:JAX-WS - categoryTag:Web Services - - - View - categoryTag:Mylyn - - - View - categoryTag:Mylyn - - - View - categoryTag:Mylyn - - - View - categoryTag:API Tools - - - View - categoryTag:Plug-in Development - - - View - categoryTag:Plug-in Development - - - View - categoryTag:Plug-in Development - - - View - categoryTag:Plug-in Development - - - View - categoryTag:Remote Systems - - - View - categoryTag:Remote Systems - - - View - categoryTag:Remote Systems - - - View - categoryTag:Remote Systems - - - View - categoryTag:Remote Systems - - - View - categoryTag:Remote Systems - - - View - categoryTag:Remote Systems - - - View - categoryTag:Remote Systems - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:CVS - - - View - categoryTag:CVS - - - View - categoryTag:Team - - - View - categoryTag:Team - - - View - categoryTag:Terminal - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:Help - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:General - - - View - categoryTag:Debug - - - View - categoryTag:JavaScript - - - View - categoryTag:JavaScript - - - View - categoryTag:JavaScript - - - View - categoryTag:JavaScript - - - View - categoryTag:JavaScript - - - View - categoryTag:Server - - - View - categoryTag:XML - - - View - categoryTag:XML - - - View - categoryTag:XML - - - View - categoryTag:XML - - - View - categoryTag:XML - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Tracer for OpenGL ES - - - View - categoryTag:Tracer for OpenGL ES - - - View - categoryTag:Tracer for OpenGL ES - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Android - - - View - categoryTag:Git - - - View - categoryTag:Maven - - - View - categoryTag:Maven - - - View - categoryTag:Plug-in Development - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.metadata/.plugins/org.eclipse.equinox.p2.ui/dialog_settings.xml b/.metadata/.plugins/org.eclipse.equinox.p2.ui/dialog_settings.xml deleted file mode 100644 index e847c8f..0000000 --- a/.metadata/.plugins/org.eclipse.equinox.p2.ui/dialog_settings.xml +++ /dev/null @@ -1,62 +0,0 @@ - -
-
- - - - - -
-
- - - - - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
diff --git a/.metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml b/.metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml deleted file mode 100644 index 5ca0b77..0000000 --- a/.metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - -
-
diff --git a/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Adding_32_a_32_new_32_software_32_site.hist b/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Adding_32_a_32_new_32_software_32_site.hist deleted file mode 100644 index d3a80ff..0000000 --- a/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Adding_32_a_32_new_32_software_32_site.hist +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Dec 04 17:41:46 CET 2015 -__DEFAULT__=false -org.eclipse.sdk.Eclipse.master=true -org.eclipse.sdk.Google.master=true -org.eclipse.help.ui.localSearch.master=true -expression=Adding a new software site diff --git a/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref b/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref deleted file mode 100644 index ec6ade3..0000000 --- a/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref +++ /dev/null @@ -1,2 +0,0 @@ -#Fri Dec 04 17:41:40 CET 2015 -__DEFAULT__=true diff --git a/.metadata/.plugins/org.eclipse.jdt.core/1233791618.index b/.metadata/.plugins/org.eclipse.jdt.core/1233791618.index deleted file mode 100644 index 01602599bd15bd1bf904358c5e4aabe904c5fc4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120375 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 SUtG8yM5QWhuD1H-m;XO!%tRId diff --git a/.metadata/.plugins/org.eclipse.jdt.core/1429456332.index b/.metadata/.plugins/org.eclipse.jdt.core/1429456332.index deleted file mode 100644 index 6a298f0ebcb1100ebc90ee7a7d56e2efc07e2b54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11973 zcma)CTXP%Nk!}JcFu3t9OWKrU*;W#7wu&HWOKX?QNs%CA!`6jGNQx6Hr5XW4Xe9TfPxm*Vg~r{D z`j^)p*0-9Cdv~v`EUm2mE78)s^rkcDRUM->uuXTbYP71gfxT;NtS_~?y5r2|XtrM4 z`0NW~Z>?h+#*Wc*7jiVyTx*)0p6(88vi0@T6uU@;p0*-|L^7Wo;n}$O~pFmXn-RrCm%x>GT ztIJp{&_tnFDp#iGXr|unntj)739IV+*aeG5Z&&Y{ZJb+w-ZHRl^{Ok_n4Bn-D>T0~ z=(*;O5#7sxt#fcU^O$CCo4sd7`!n5ndPnbzh(x7&?UreD+qe3nA5@3V z5uf-BPAIz~oc5^_oYQDmS7DY68>L>`47}CsBaT*a?5RXgC|Kl}sqExbE)QRSQEPsP z1BLGq&4GpZ7fT@ymxQd|YguiBT_Rg6!o0X)*bnvYz^L-`F_nFFR(C`&qB&698@T;} zi!dzCLC+cV`J%QAPstK8U5-9csitcReBn26linXgq@i8LDEJ_hpVF!$F_({bV_f< zYf+NuSXlejS`5mP9MBuhr%-o&u)S^AQNCwXY1|7fvC&Fp{Qnc0H+mhjXM7s<&M8$o zhTG^luHI`I5^P96ECm%v>KNCb%UJayR}~Re7dWvGX>r%E&28jOr)RV`%#Pu>VzwbI z2ImF|<&}sTwX4Sb7$uAWylhLRIiG=BhuwomI z;d%l{(t&QIx+lL^%r2Qo7w>K~yxJ;TFhS%%zO?wj91d*ywX|(;y$n*xQ>yI11Q7$g z;Tu5iU_)hyr|qoTyKkv0R9K_Ps?|o%bfwOmMOLK3O_U;Q9CF7r{S9tF0}*wVCUv&Vd~wMUtscNb6eGvw?r3l~Mn^en8ZENuFA)0CSYp zp+uUWL!LN`Y*0UYr9n`xBucj$>v=|#PfYJJz2e(e#Q}FUk|)X@ixL0I#pk(q7UwD_ zc|q(s*mL_s31;7;Ce$#|t^7^J=m|}?o*J!ZT;zC-&pPo9%PL3SzJim2TnaM4k++Vi z=mwr=2`bZcm1Vwf>piE7P#<0Rp5PpTe-h&zQqdQ~+lyPB1shVqwd6|kh|=xKZVjSL zT*fOyD&eX#ciH=XAmV&KiI@b%$ajGXZ&ez+!>&Y?@mmjH7rouCu5e)|Dx-zm`HNv& zhB8f1H=16GvunLLTJVEX^pddT+xUd0Y&6;|)hoa11cqb{*dC{JIVP`ask}|1|DZ~w zorP?nW_H>^DX&@RM5HxQqKEr3tV~X5g)&`2Pao>auA_Hfy}>O{W=f;UuGQ<{?`*j; z>$kLD{Z(|xt3+($;ef8F;?zaWkl`Vy?09zy#}rGH_u2-~AChKzg@VwVw zibz_4Chza{4ZMOYJ?13LSu7_iJ(@(XZN~zE`Dbeww0JY8Q5FLo{!G)NGztzjA7N5b zjPPd;aurJznq6zbxK7Q&48@^jLzaD-5>fHzDa|DsH@uz2%apUsw(o{q%iim|7T!3c zBKt=TYj}hceeqX!SP05(K3Koqs9_H`Lf_9rJPxV2zULaMmjEH_J{`3RR`Z^>DDQP& zOo`s>%D8z6`;fOlC0HN#(e=RMIduVGe~PpU<~Pi~qaw$F1EEf-&_$NIJVt>MDRoD8 zpNg~-4*of!Jos|r;{ibtm6uZu(=cAkWE z@(9n*G)I+DT&v7IO|t`#0;Zot%qm;*tCy6VYFrCSim04_Vp&~7=jcWmm5T~tRNiH_WqydQ;waU41&W0r3#?31X?l((A0lPI;1zObdmFtW{>B_CRcQob zWS}bN_{d(!TbUBUC`-7PL#T=fovYU#xMmmID3L{|R|qW0(jZqero~clA)>rDT44c8 z1NCB2>H)TK_>>5QO)io-^uYQK*N-f7p0W`-&v_3z;@rp3h@Utr5Z%(jFs+78e+FWQ zCkCu*{xLMUgEYd56e5(?;%Mdzul56!0jrq_jWi#;!gE^DW6O;)ZmPzx7Qb33Q4XC< z+hUKhNh%R62#a}D5~oFOzbrM-0bx%rI8;kycLW@hXqe=JhrbRei~9=H&4w@#GWK zc|HzQm7PSUmZirqwtRQVb>q*l0l&y`aA+3gfq708Xf}@7VLeNQX?n-AR8Z5>xdES> z+*Of{#PI6M9OY#y*jN{CB`-^ZMk@PEozMA)AO-Yr+vtgj-jM4wf#YEBn6j!Q9H0#N z5UZ-8fI&j}BMHd(0N*x&S8{+>fiS2bzy@DKs!c<2R%|d01g&YXg%?gJ|9NfAD;t~- zZ=MSRu*!V=H<0+HXXd!uD3%Y}? zl&d_{c75IATZaud*S9f!?_lus(FREKnii4kNKpsqOq=iLx@}vkyQ%~UlN-w;T5# zZ?4_HU*EbbdPO?$*xlsyW3vwCM7@j2*FkPPXfQ7sZh};c2aeZ)#hTGEevRHD`S6Go z>lDM6{OFE2r;ZbKsDviN?CMXt3MD~)@HDExClu!}9K*mM+U?ln9l_Al*v;6~Ez8D@ ztN0)X7$@-|Rt0C`9&q|ypgi)3qbglXN8~=Sbz9A=uV@C0f{Hl;x^ki6c`hA_8bLqo zjUtNY*vWaiZH<~#nT7Xh!ITljcx_{rW(l+r zD{I@^z=pr{fTb&g-j3CV$JuJ5IwEQUstM@-?9pq=pUSqddJz=&Y(PgM9eT4Kf+$EQ z-c{cM8K3osV&)nEOKi>pCglRxcuY=;Ga|qPV0oXf8V?QgA4|Gz>w7J$zgN8>Ydp+? zZ*T{D^2C8MPU<1$TR>%C6uikmTnt>6^NN61We5wDDJQ@|;7g1PCt^zpi5?gNH4!%; zQ`jL+7SLLZIUEbKvsm1VdlANnR~X#$wo6Y;Zh3)91I%+sV?gH!7RY*GU{Av8Q#<-| z4-g#x@nIgu4vMGbxa2=#l;h1W#wxX9K&EOKM0cRy=^&*ehIo}<@|9~7#xw5 zRTh-!e5g2t?DA)*P0Il!ziW)Hx zjhY76yt>HYn2W|9{sVoQoVMkcDp3(amy|Qs6vtEx(Mb`Fa9MJ=cj9l13V=>!bPZ}9 z&_}6U|r`j45-fKctoo{ zd=%xT@;XJ5nn!MA`C+w6Z0iH+#*=Nex^j-N=N*&S^R3Ah=VLxoBH@raiRe84(761{ zN*6p10UlRzWsHhnt%rn6rqBgmJEBiw1#+eO-HZRfnDYa#;Hy1{CvM3gpnj4iK=h-f z@9DR(vzGa+ZfrMW}zE-%2uHg!X6p4Hu@1kiMp0hw?xEM)jJ?y=xJNB&b%H z>Qw4dw3eq+9?`q;Ku;$;q<3OYNzi@wg3lh(wI=^)*hg#al8o~Lwmy3h&6zTLxt-ZT}tr4eZ>d9A{ahY>eCqOrR$Mr~Y7 zuCL+$#m&9DLA}RcJH2k$KDdr2L3h4n3Ni_PW? z=H1@CTKv0qr`9_R_WHeE)b{(mXus))-P&Ti9rfGwpu2n64gAIrG1pSmYWeL({KKM| zy3Ij5J--*=s`QE9z0(Vu7<6UbKiUg6_xGD&JJ@RaM?n{N7xdRBQP|!MTbR?2@BIif z5(nJ$pW%1^AZ)MuVcQt5z1!WWg~@9-U%Ys6W-13kPj_7V0K+B=o+$+F zhCF>@s=XlYedagAM%X*5eSkMEO#yEtW6M#ew-&VzYB%l6m8iWO#{OP2sJ)Nj$7Ze@ z-QSH8^vj#ZRCfF?gWF*i2F( zUE*LFXcGXBO`+4rR2cHyOf5&-K{N6ja(!-Q0sD5p-NpeE1%&WSZr%zHR@=ScAm}DQ z%mSj!?PP;(;Bl!L_-%Rp!c>+dO>R|tl#T*X2rjwEyH#&}`8(Qh`B%~wDJ$`S(86Gf`S0TY&L4|`g`DjPBXBFcVgz zBZ6mpYRf@AZ28TEET@QGyzR@o58au&VGd|75;0)+oZXh&dPz<;#S`Zh2~m5W9FU(i z3nbpC+wyz8pdnN&)14YGz87|OBRQB0GuQ67_Q1A-;FBGfqdwWk!Bpz_-8iWIjMJB@ za==S|A9r||&rEU8uium37iJnuD~&j|njtV?c#?!H3^1?+Xg!&K+OOC9t$vdXM451D zz{6H93GtqrnH`XWI}naJH-&qF3WO)7RBuLY1qXEAZwGPR@91hTjMog>2fahZ4h|h` zJirO(#$r_VhXEdFB?}&?M7OjY_?U-OePT*-^m6e8wA*e3*pLEWb>k@&>~Js?@UZ5` zy_Ie^QqgyAszAgjRa%Cz#Lq)0O-$wrrJ1TJ{k9)jLd8aTnp>Ds)_7=2ZQ(i|$|Xo! z2|hE6NLI)mIjV2WG!`Fb8Mk#uYg53w=q!2Xi7DRi`pWZ{rW}W@un8IF$fU9cF{cuh zI0AdbqR4imlv5|YWD|<4B43gXoSLdT7ZJLgtQ}Jv%sQI^itFW8oAd~ zGhdH7N2_fJT`*$cx8xkojHjF-lV6xZmpcbC^Yd?9yABHL3~QatEw_KK8?>S?Q%>+4 zWswyos%9oWYWMsHdZq*zl7^HD?pucPJ+P-=q^_}>ECb9A?y#EA5_B$tulA$;0HK*O7GF;& zXht=I5*Vo{XG)%#irOpfjQV!_QF@tOj_$XqPjx#APZ6R(HL9WD8=uiWe; zry)U_x#cK~;+BS17n%=PKQmKM+g-nBiTk;k;j!Q(U{a}eerUYlw|&3q^y^g532>qA zf;Uw$={=&=Ga^60dg*;x-&6@YiIZHo6~z`YvyKs!%Lo`a5s-?ZmGHY8b<^@;Vv4yD z9%&s`l^)%EVux8OQREd4eYcglhA5sPja2m;jisg^$6HSP9-B%dI1C=t4=H|xSW7-l zYXJoE81w+(UI=qpfQ4{ML@jPyKt>1mRRh}LQ;mQIRU0Ovyiw%S2eg?_Or>=s3{NisH=dhf zBo+@|g{xEYrmM364hB7L6oB^1w8_<@7H6Kn2InHG`}CXS`l^}Rig>lMzYpJO_ozc$ zpPL*GA3t#Pdq=(C*T2EgaYko--2J>xd$7UR-nC6jOy?X2rQtkM{WE# zHZzKmEtplXKV_DRh&yr3NOFbwD_pCn7MzUm;-k1uE|DqnUq&J6qyqfmToK|yZ92UD43xKbSElh6>-1BD2CmM{RT}79kePTZabWS}(oF1O zmi(kQJ!`HmLMPT0Ym}NPz9tAzeu8UFkf}WWoL>N76Z@Fu#7q#0Wiyd45$ah}T0LmP zgxAFD0m96Nv2Oho(v z7MURZ&&+g|w=mJUDcV5fg^0cz$z;gT;y;vfUOz#ks&uj_#8>F*;ZDt{cyt6mRgL z(%={F6bfDybCw}07#b3aDpCS~{~=((0$dg1Iv4Lz(?d+&6y4Xx* z1;U<|p(?+eH?v@Jkgu2+r`6GjAgp;@KZZjL0*TrR^L11DJnG(qwIc8on^2+FJSpN- zK~g+;!&(|s zG&S%Lwg#1w2XpGnFzOTV3o}{g-&2#n1;veD;2+{ZagOUpG+e}Rpd4&NvcQ$XCxREI zd1eXF{yu_;1VQDDtYfEv#MGz}*YzM9%LvJILquh{$W!sKVg#+o&agb`Ia>5y{n(EW z;VIdb-n(;Wb(uSYg%Y;Oq*0fYF0yNLX=P0q5*iwD3mC0^s_aBVa~#(8=w=|ED?|aY zng*mXKuoVn6?fwRY(@VAt35ZB)y?cY9we2j>|8tGY3JrKQ;HWA!36ZVnfz#%14ucA z9jAoB8CL$N+QA5n=|qa)a$*_cZUG94XF8&nk^r;dBe%J+f*-K;c8(BtRznd2Pa-9F zfH>Dq$N(QzhepM4_t=!cioMV$`#&S6VXxK9GN6Z;R~%p|JbnuKsTv`14&F*FuuO8?0Xf{m#(dV%Z522rF$rWJN+qc||S!9LX(5n6yU zDu^e7t9+pXC=0h2*LGI)VbxT{P)RfqX1?G)z)}w=W*?cEVMaYSQ*e>3o^)&Ecen3w z&Y~(`xa%-~4sXidArV?fq%YYdEJ;EIy?51=!7lf=w{W(&MP%mNj-2K< z;P32*>H}?sz4{@CfKBHAkKbxaz{Z^p9*9HoKT-&P`FC$)E08kr+e#kf)MGOl(!@S7 zvvzwc4}v;UMw9^OCQs2r(1aTY*55%cNe&q6Ywie3$!joX#W>o`*oc!MErfHdCMpeb zV=|;YUS`BXg^JhmA2i@^&}@asCcTKYWoTl;R}tpMVhGEr$BS{W1K@2U6bbUf>`XB#*dMl`15%`gZaz3Hi)S zt|cprF=J(II>J^Wz|F|xlklX&hVeb&vKGKEj?tn8#%6J}-Rkf6PB z%}hIEh!1ctCzduCQ$h((%ycSv#jk$?Q(uIcyBDSAt(I1ez>}@Q`^#IV8KDgkw6{N}b5^ zZ8`+p9tNM9w;h1wv-d_5t%UQ`6t}lBL5Z@HrWB!Y#e}E{2hHuM8$#iTVuQ6ndG2-y z;iI__427Gmo;2+Fy{JL2<=9Lu!oQa&38~4t7IAPuUjqX!k?>5U-7l@K=d!?;b#pBL z!%E-qH|(R5-65y+W`WP5hWU666${fIjxR36mYC0QV8%r$ZVS6`MjUFc-qN5zVP|b| z=VQJr2C9``02Nz}oi%knHdAeAKpKd$9HyghNJnpHyMN)jP0p6EfBb zA-_nLuiFo_nN9?3KP3L=hs@@;;&=iN{&g zU?}c`rfw0$QO#QPk@q>|j>PGtGQe*SmKH)SprWbG?OR`LtuFoQ4&~&D$-z93g>tZ) z`4&!RJ~1dWkRv~T&j!ja%|a${??kCA2~lLT1$TJ9GIOa1%TD2-9G-z~upbWV+Z?td zqo*`^Zp$CkL&*gZ75)XtQ*vWiszR;cLS7!_!apLJi9rYiW{*rwBMqhA#AA3Xhrp;T z<-#z$Y=-rijQ;*-T~fdE@)k%+|=ynaM(nQTePs}bz`{if!dI5!RpmY|Jf zxsbO6$iGlI2}fb#_HYl;!DA z;-yTW6KPc{P22=hp)TH7_nQPXXh1S%0TE8}!ud!6wYQclV`d0^@o$0+Ae%xrRoDTk=tPCNuS zT!^Fue*bqCUwMY+B02qT2|*~%R$yG@+yeqxj>QZ!wcF7nCfXF_~f@> z;>A!Ec*yWntP-IFQ0Ql4Id%U#k~P2}81SDUJfWP5YX~#7jWARK7WqQ4e*ljf+#J< zJbs^;X}CaWz!_HSs<6^1)3E8D1ngwJB!ZHrvPSGf@eyQn>bl_aWUO=*XtI&ytYR39 z2B~_-3y-p7jh8f%Iw&b_r-56-F|dildoK`bFOP)?6L+ zDr6t0rT{UmpfQezC<^K*nY?kM0uv-2M|E>69`Cy5xQZR!JZlf^4?q~ z5-Rb3lbM*5g?tag%rmJt)^h_-DTr!BSc)o=3uGbnYV?}cFRIH1tTY)^(jaWrTpO3E zmN}6&(2%^vS=lrq%29JhLlXzt{+H`8V3q+4`|A*#p?eWycNP$|dckc#^#czx$ z7GGML0KBK>12;j!Xy4(rbMp)Lnln6XZA>;d^P0%{!ak?_vUX! zW-|eGgY_=8EY-aljFtcTic@@T{))$7Ik3jxN~S2&uCW*3hV}vos{Ua9k^`I=sbzR& zWb8woI2oIj+9QMi+q~sVSQx&+&v$Fd3aA3=KF3OK^&dv zTk~gbKo(QO^E^q1Y3&1fXLPndnYXjEsX!XR$MbYDuIb(wUh~o&^#cL$LTz}x6vUl%>T070vU>eSE8-z0L(vRZomDlXI4Pt1FX;Zu7JbpkN_qhI$UhgH$**+b0m z)LYoarMWR;hRALbw|ErU&&>iy8W%Wp3xLT4v8YX2%o{-b$|V5Yn<^!77zJtJ+0 z9{$OEU$`&1ok8$hJi<#eN4c3i$4SV)?`4%$_9@&+aR~-X1ELZv3d@#l`dDV+T zET?9H@Iq)0LGaZ4RU%nmI}03?M6M6b^B5Z1R!qE#vy?o~%pBG1&=ikQ7yS38)Qjk5 z(H1;2fkV z^y3YLFJ)K~F&)zxHqcYVw^8e3u3(+bcG{2VyuYb1-a_+IShv=GHH<$$L~u3MCKA4$ zN1l*vcuNRTAp3)YZF@GTV}78WKR_0;Mjwr~QSp67vuz^`E*WYataInNtVqy9=0y?? zH`ZJ)8X|f)1j#8l?*fliRNC9M>pyyQSo;bkqyDp7PmxINjHfu-&-}}TeV~wo$JQ&Pbul?AsRTwG%s?jv3fYjCfg3!AQeQ3+LFykozPGtnGy`e&Z>=ODAJMCqYOdtJd9Ub9W>bz zipOL79p}(?jK(|{*0(Q?Z=InauvMut4h34QmX@_$z4TNAWs8(Yw(n$IOWHtlAhC?& z9qLg8tz0*=I330W<2aPwMZv*5T1N&#b$Vt4&3mKmc9STF^Y#K{V6A{eGDF&OQdS8L*+js%6;yCW&#$y9qhk>~a{VQ5^~E&3DjUj$Sg!TU{xjx7jgB1Cpl|-5_VH0!%M;C zop$)!ez0nF8-zbLzZTs`F%Qb(1(^?#PYr*kTPYSiEe1vZm18XO9|d)$372=6!zI#e zJH1TxIMWy{ufbdKKt?Eyu*W^F^A59Vmb1=+RE<=kpbC@IIYNF4ri8EoECAPOCR*3g z0**urHWh|6gLrKOZeQs{A@VH^(@_mE#iS+Am%w8gsEUbKR8JLEH) zEIhU6pXuKQKcZ=cEjg+{pbtuWEC!XK_;LYe9*vui_JXE8rCb?v&LypO%KSVplxCx+ z6bauUtuMraq=bL~h~`nS_yEBfY!C0`*q>7s*+s%`T9XttoG?eRB@D@iXlRX87Dr5x(;8M0=V0r)dFy&6Vi2041`nd ztF>LI1dBpvv==th%xwpWHP2A@6LUoyJ~b<-LJxx==&E9uU`tuM#4#NUc0|V96cCvf zg@fRXbIyD&IwKQx<}oB+*CIAk|AK2E>(M9F;_3WW=AN z{z6GC=b`yd>!>29z~sE9jmN47OeqLwEPkNB8iQCg0kB|^iE!1|iEw2g07ik%YGC$B zSk;C$FN!=p6Rw2AMxA@_mcOUg&cG)Czyb^7J9_OGGBAV7op==#XrcdH_-f@r2PN5D z*5a1##Gt52B`9~8GsuJ_#H{kn>H|+~XC-*3j97fXY$JURwVJXkGKM{ZnJ`WTx!MF2 zol+gBs9>GgNZL7OIcwy#>x#Gdu1G?cm z;3E<;`E19kT%L*U^07#}l_RtwyTcO-wYHiNHDuGcZ^*z4g=q(M{3pgmHvEiwLNvzZ%fY7~RycXayC*95N zGRj^d25|eKm>AB8)}3U(0)mP=5p58jkQZ57(oq>rg5|KQPOWekpbg{Aj{Qx%jLFx& zz~3WYa>+e*I>8A9Uh`HC92x2R+%0ZY=FL*=DaK zqJ1JmpN_yD#0S2H#k5yPB-5I7B-@oKiw5oz5s=5302sLvDg-CT3f}}w+|?4x@_lX1 z7g9iZ0A>^~ORnKigt4Bi^ZU{0ig1GcFqXyI%RcO+8bIV6j0DqWOcmq%aL-sRO z2X_R}?yIBl4&P zkrtagw+ybHi?_35^_jX&&|omTRD2S&7jPef1K3pP@@IfdzX}4s9#bv0*m)vzgG8u& z_yHMi^UTa>S^uDR%^KAl1`Uj9G_1&Ld}o6dor`L~p_3XWC+L%=6F*diE#?`ALtsrh zfqCc8nycGWQ!F&4puYXg!8@;FKv*2HmIx#=fcLwXu-l-vN`RarCz4_~G zYU`aE6Iic)agn`~>lbL5yZ}|43 zSMZT8mGV#|-?ka#qq1aO->JRzpI?22RW8lD*?j6Cz8q#%^UA*e+x(cD8h7$;v?jGI zmVS~!!T8BD!!ONGIXq1$k9`9^n|v8jR(J+@T%Ppx?0;siC0@udVjr6uuUb6$vP4b3 zRHO9s%)E^QGXL?_SFhkihzhYhf1D(SUk~W{%h60A9ZNq@FrF*Tk2@4geZG93>a}Mw zW^S+u?~b9wr`XuU_a<1|@g{zKhQDPqg?Jf)#f-(^-W@aJ!?s1E2Lcn@!9MIUG)AB+ z8bOQ?O<5YTb?9H#OckDM-0Sw)oGxR3@-4m@$+lU!y76zu>ml5r<3IctQ`V*A;V;&x MV3XH%%;wqu2i@zPm;e9( diff --git a/.metadata/.plugins/org.eclipse.jdt.core/1528680760.index b/.metadata/.plugins/org.eclipse.jdt.core/1528680760.index deleted file mode 100644 index ae69821d236976ceb13c06408b02c652542101d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83830 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 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/1737447423.index b/.metadata/.plugins/org.eclipse.jdt.core/1737447423.index deleted file mode 100644 index 0ab3d4b16391dce7a2d009d6aa9e3d8a3772c338..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25 ecmZP&_VjacjZg@44GQ-3_fs&`Gc+>)4+H>G`UvL$ diff --git a/.metadata/.plugins/org.eclipse.jdt.core/1770465405.index b/.metadata/.plugins/org.eclipse.jdt.core/1770465405.index deleted file mode 100644 index a89d291b84e1d2b76bbd7363e3ec665e4483b89b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8445 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 cF_xUpP2=+mzE{cBN7Oq%9bvt`6 zUrBZSeV4DG`dxi{`JbVky_c?_rfWBGpX@f5tf1yiTdyhK=uJ)3yemJKFXd+5)J#o7 zg~@^0`8PHZt!tu|;@rYwZfd>*FKD8UoAO7s{bI3%&uzoGQf@ZCm@h5h)5=>) zx%psQS2R)GwVN()qIxXl(rB_vFvWQt)HKq!b7=p_xlOdTccwUTSo_MD3w^~>9%HuO zJ5^XXq(5L`Zc+GK7IkrKQTXgF3L~%9zB>M)TwxCIy$GFoeEi$8GoPP4n438Kh9+88 zEMb4crQ%|K0{g?S9b@_X7DpHJxf$)X{FcJvA>QRYK99~9&O;LhQ)y{p5nUI~Z=%+v zIe=qtaWap|TX)!V&H!jVdR+v_@64GQTeHF2nxD+;X0TS-JXXj9ywME+s6+$cR}U2Y zDLNl4ymL3Y_Dq-Z`Puy3;)OUIUBprR**Tmml-x?rUqLPQpw~CiS$x*5rNWWiVje?W z&`OO<2WJWs*zc(SB zxk?Pry0H-q(XhK`bT|H8k(((NfEzxLSMQ$9VY*U&1OG9)yJyp;EkL=tt=C)z_-x+3 zh5y;wy$PtncwN7D$5sF^KxKU0Ieb$eC~>&AA0u?HYa@!I7FM@>V05T^WA~l!O5`ptl3H zY@g6;eP)AB!<1@eo)*p}N( z8EnH>t-w9VvY8Ftd{{j0-kv@=Aj>7XD~x*{rhtUSKX102AtHqh2A>18xh_H*;4RPw zSgmNIAF%@wtXmEDfCMBA-x=qMt-w8<3dm$duZL{t(=ytlEzWJG^G6|{@{>ac?*Z@K z8OSiST)i-}*RaP?`4hkgMm6xt8GLBcyfn9`uYW@~xZ)~ss-;qXBsVu%oZVfVfvy5z za-(HOXCdfIVCkSFcRF^9doz+jv4uR)0PGLVl;%|QQnIw_!_cf|39Fbn@XdCrVFFircMnS~S zw@}BC+{}h~sCoAmOOyEK5Vh|HijEiNbCcI>!597Ji(>Rew3Ur$aGKWi4i4S2b6|A$ z_}-qkkKfdP>*&C3yy-uo_WXVGIK%uTfGnGP3!R|4dvs+D2bZQcq1j8+(%oC4=pf}M5x|<%Mvu3b-TnMH+e#^iZ(0#|& z@t%D<##xMu>7?*{lETm8g)W=*`^K43MfvBb zbwRi`_J<}XJ@7LR!_m$c@b9bCGFzDIJ-V1@6nQ0NPYk8g)XGrmpPLvsA}yBBm-2=* zg~aeB_A=a~B*Z%yrTW6eLHzM)YANNX3(Tnn#7rn>5BBu-4~~!akAMQlZy6aF>u0`# z*8S7~-Fq5;y+)k?(|QOIrtt^qr|73a zdG!MaxY>)e%&t)+oU#RmBxIov$z})<_AJP5*F%!Ez>N?wo95Z+sZoeI40()Jc)Y6H zokjaWw$R<8b0MsC;#O(H;J`eMSac5!W3eBLh)JPXzjt&OS~NI$3gC#C!2F-3=7Teb znSSu$>$I|%%g^u5Egb5ZnJ$(f=V$TtC^a8}%b_6BY79C(i;U5MUCfY2seLgwjdfb8 zIYlkQ1LI>oy@R~S{V*sQ317p%48hl^)kx)W{s z4pBK@Vo^CwO+c@qDW+4%EXzEY{!hct0cJI{7k}>!CBddG4!$cEM2kA0``SOS0|08L zt7x+bwuAIz^dWkZex5!>p9bR+dlKUf!HQ$?$cI;$DhO^LqqN!TLyc-PLNEg#q8l)k52nrOW%*0~h2s;gW3yX{|`z_n;8yx80Hx^^N zf#7Dao~Gq?&aLARi300E;GAX3Xmg5|O^aU-N{q#o7pQsuV4hFUZ8Ze$wKDih@cZ%M zk)g5vzOkVZ1ItHajAo}aZ7PYKfZ^I{4K~?@ZC*#$%U16MlVQEd@=IM*z^zn(HOxXm z#IGP~kPsBmu8QGKLpxc<1}R>q$6oj5O?bYPd!L0{1av|Dc^?sHxkLhgmo1qk4SmtZ9NkM zo3f;i+1x$FlHoRJH9$?Xllv6Wk3n=nx`Vx{5+6>hDA)nLB-Wo7GR_LZ3nAoGc6Uq_ z?i1CE!7B*365who95Hg|ergg{!m@grI$*yP=O8lOVYC*YrwGubK?C5+XYdj=P8CWE zi!$OK=)jJh^WINTqt)oXLdz!eQ@N!XRw>P>AEgG!Mc&X*xMYLgq8};@o5frcR)2_= zMQqOTnx?~Ix?!xRsR70X@3EdnXp|tJ=EXsZiShGj>^u~)+9yQZi_b>(asDnzMvHH)!6vl=5z>1{i;JgK9epJ+FTZKR|ho}gLWgFLsbv>XG^P)UVlp#UWI+Z+!-^ApdXze>cI|{HA5ch4N*j#Kym=TG zP~Gsyr>WW4BQkE=j)7hMqavtuWcHmJbDwAaYwGZIHhfbO%w|9gQNu!RhUudjn>!*p zu4z{bkTK5EkvUM7fo8g|hNfsifsNJ*C1RO1j>>{3X#3;+4ekryf z{tni+wG<7}u}abZ_Tip=hMYV`rtFWEXIS5|dp1wnjlIHv!ib}mnvHsJf4CnNX$=!_ zzhi{8v=aYcNN=PoXd`vgHFSV(r#tBT=?CZ-JxU)H8|rcTS^7C@XO+!Rl1$F#RpVhJ zmG2h6kD5{f1IK=qm0AmrHw`hHpFNnLgtM#9T5fePfF6gNavwF_i=bgwH>POA>Mq2} zx?#)likK1~r_Sm8;($>Ax)||0p+~%#E`ug6xv5;r{wBcKC@dj`CW9TRpAU`#_H9St|Iw@EfXJu)37)QM~Ajy{5=IL2x3Uas-u3|FVl?XORx;peQkbXVp@Yq zcIOfQR6TRxSi3#o&*?r!bvgSaeKW_IQli4;IYv z$Uya&;yNH9PXNifG_!=MaT=r4!Ry>VCwRUYQ(E*3Fq;WrnZxTnI5frW<51kxw+@%o zZ1IS$>jW|G_79_$S?3)~Ok$lvwBWVJ}M9!&~us;_bslr@-m&Y%JQW&r=!b6G!#%}`$ z3??WqZ9&XnA_sT~#CRaaN;NtKH4w)*oIfgrve3oc{v}#%H1Uyq&V;SZkV-!6sb%*f z+@~@Egb`e6$g+T$Wj4MZXxsuG0Xw>j?V#JRWy3D8j(Ws$#&M|YCJyB%4kPS@_)#qK zBr6$JpGenMS^Ii$5k|O(8_Hzuj#;V$j+r(eC9}ft=$X>$aY_$jamxS}mlx8-1c5-E zoP;{^PO>RzpdB9lCqiMsa4jbcSW+6q;d27F)pO#c9?8!zpj8>jbPIEG07ogLpJOdG zIs^=G0-jMeX$?>=pv$R^C4Zmg#fNA$XJCN4AT>taP7{VnFEiGya%o-;9KaHikww%2 zk{_au1%{h=BL%*#G59iUTX>luLsbETE>oi zNrkHNCW)jK5RH@coz0tMwmNv}`k5ol;eZyv?QjG@YQ?l2#htudbFi%Fz#^8j_Rp&g zq_$W>I+ASsIYINjnF364qoEpp-!@-d0Aqxnz~}r85u~>oTw_71LTE3@I5(|Qx(yKH zqudIfsLW^y%8V!no-e@+!Hnb?<^SM!9)csX1fV%xi47B&7L#UgN`fZ^Ay%WE`s(wR zLR24dt@$WA1pU^FMivryJ75cx8_P|1@hrz^)nXBcFffP1zoo#tmxMD!(c{(Td zo5uR2m5R*RR9f;O1OE*$ zEx=?8{L@_?*WeEI#*kUgj)meJ5-%X%AXD*Elc+Qt9}-0-cO+MsVNePJwgHH$(?(q7 z34lj*gn?=J@$wEQFM=A&a%!FNWL^buZ31R(fhDpXpwB_QT@oh(BMct_AD{-MPBM4R z=b&-|7$+bmRAGp5*hWu2>h<_%}f;Mk3yYNtENpfgXkn!4Qg8~dTjVD zz`oVMKLrMBb9^M$qGVu1Amw%3iQ{7MFmCcWJS1Y|M+CbSJj}@1eA7tUUU(v9F>sO> zkg0K>SsO?BEoWsoeuFwDi(`YM-5ZBTb_(^@fi<2Ii_55DE3wpdFe;UaZ3AGGk?9gx zo<4zmO(^#`Xv4Bt*I}J_un3ikL4pW4K57n;;4S=DaDSE-7dW}b;5}C#~seC(bu*sexyl=dWF?_u^NBG!mrEZ`OJbu}p%-x>DL1)N@4m{LHi=`A$Q z0o6-^{XJL=QnsM?$@XA+DWel3QOyq6OF)xginE%4FH|6%28;K4(y38M ziK+V}HL(V0B$Fr}i^bjf`wX@4lx&sVAd|EpIXXXwrQzE*3k@j+S^DV~MiQr;>L{lf zNDMK{B4jmAXuX_~4%G)YBx{9yQb*_!V7%&tP3$n26GP^g(II);Yp^tR!)!A>L*cI~ z#8YfvF~l5f8w?M=lT(`}4RPQM;Rggh?9JWBLPI&3d}~!K|NNUK;K>jGwSaD|P*cmi zUKP$)EUiN}%2-td|)b%r6Ko=<%|SdVw|qbjEVi!IiHt zVW>&v*|+`dS8~3B$OKTI7_%%etlT6Fe?wkAj;rw83sL8@#%r*ZI#{x>7MU_72S7S= z+6<1+31!)`(pNiAvU6!>MmYr%Gpr)XYoDeS0JN{4Gg9-J`TBXJf)2)4fKk& zIn5GgWVFZfrO}Kt=1CewOIZ?mj_A?iKCDqT1E+dn;g)<(9c5pP7R+p;Q;=H4K)(?J zRb+;pY8;OV*$R;|KC&XW_Nr{wuHr)-0|THHX<7t2pWwQpbpB#EcPYd^k&tdp8+v zgh}Et9EVy|!mt}0!|uQlS|=7mGVYHHl~`rVaV6GBHCb|#@O8`6BUfYSz1xFG36c1qw5#~w(&I{rE1se^Y|3&&GC%qzO(FW!X$#mrIHdWP?p)%%}Qs#wBTVp z|Lb}Hxmnnp;c*gdQ5461WHyW6?Q?LLMV(hj#>{%jnb{^8Gs9v-s2Xw{&JSb1LT)*C z8P@SPfx5@?yAc}IU62&tkHs)+8$n{@q(+92fDP4m5n*2a{C;YjT|&G9$8oW-bMbc?7{NzGlEg0{>S*&#XZ-%QZ|^0)F8#DrT%(m}#;O%f`_%-+(4-a2x1h=#Tx|zM#BZ@Kh}j zjtH|Aa)roxjtsL~;~G%UwX)bfKo*rDY25UrK2#s&a;`PHwmQZ;rLw>9#CkCDSY z8eI=0i(me z0%+wYSzR;K)iML-2yc)|WX{uo>S?@}?jpF^f)}#WY1nl{^m5D<>?cUFuc53LIT>IXMB--oyJO})iWyNso&_4*mZ?{VNTztG zSeuLj3wsQra2R?Zi22K0DQP$cD+i103qqq40Z7=mSQW$V?MC2**v%ZB<1Ue{iOZ|T zHFbhMNvj?5fGsJ~up{<_ivUILmuNzk_Uv&?Bd5r8z%Y*rb-1u1gC1Gf#&6{7-(aOq zLmc*)UX?WL3|CC>Oq2uQTi^HvNvZK5ybIzE!%e4t;}__ByOazj%z`s=tYcu#td@A0 zFcH?Yt6@BTVhjd>I&qM5wY(6hHc;kvr5L&^t4ZAe;Mqm}tn|;>>>mkUTjzVpniI7?pNQ-5)pzH6( zz0cJOv#i{S3W{u8n@SjmSkr3)7|)*on6^2Tc^lk&tZ6)^*D(ZjaF1nS#wbP1D4Sf6 zm>nvHWSrqu9eWW|T<*sRBZqYpBUZ^y5kh%BE$@gGIo2Wr)7-<3*l@l58TH&qhh0V;Wm@FbFB1!e?>TI!^HF)+S@Hg1ga*)V$i^OfPEtVF{bA|W_kS$xOU`cP`t?> z#<v24)j25`pmhj%K9xuk3qon=gS1WT zIP@j5+)(QS4L<5cMp^9PdSt?l7iw^!`&Iy?vM=%xC@*0R++Z9NGH>B)-fT*SQ708) zk^1C!G z(x};fWI|3X#ZMB^6d)-)o>8D0B&&2Wz?sIL?#cwd$C`OqtS55%__C24CGswn&_$I& z0u%Q_4uz&$E7Jn~O8P)&Zy4KLEUmWp91fv}A3!!#KSnW06Jd zBQUOYG@g$$`Slv-COE!6X*2n-$j?J!1YQ;G#P|r`SUlPbvUi~2dTO%I=OQ)0hmHYE zknx96p_oM}5ACS}3bI)pOo;%8A7QtgAzf+U13)~;OOI%R^07nI50?HFoJWa_f;utV zA{S-4XkDvV&}W>uzG7=Q1u)19lK)$D^N(!(c5JtJUpDNu&8>W!e z0V!{YY`mCguZ9L$a)eP!oYWAqCBcZXCr?)pWU(gnPM7Cv%`FaFAUhYWKIaF5rB|38 zAz%4;sN6Q@6j95CY3E5x&5&c7^jIZyLusJ`+R;5*5s^PFW;QXARtvopFJ{btpSYb6 zvCL5GN%JF$A6xE~0B+N%84B`4EPb5Gk(oZ#{d(*Q`bD^6sqSa442r8~<6N%F#b&Vc zIwU;6@m}`Va1>m5Oc~`YGfMWaooZ0`E)}>A7^eQO&gbgXY#39u4S+%xmEN?BEN9s< z2WgrVEco0mD%*Ox1mD`bamRs(>9rNSnmZjjxDJHreiQ0FLIixZC#v`5?k+a7#6;RK zW(>`kcnv+A652G-Q7Dh!iFjH{>7$igW58|7j9Q0;23!boU-#u;tYcZv(Q;f?6Z6n4 z0bf2(={M+u9q5H>#tjs!8t39(A?7sW%wxEb*{*4@IDxuy*jY2MmD6gM#BM%GYqgM^ z6gkvCxtJUp*2y&ti<-&lIoCd%o)J8~oooV#oBWmUUWB7C3a7WbAgntX)t1yVtD|Y` z>T)y!pwmlLrg!1`f1{h+$t~ETg2~q34TNar7|J5&W8)y<<<5JhfG(1e{DP6mF}@Xu z)d5;@IDuhC!8oMi-|cte6Y8C5t%e3|zg-1?O}@Vz*6H zwGo6Y%uKHT{lLtu+5qmNGan4EVc}l%`b^mpe63@LO2vDbBrsqL zAi^GnK4CMQaQx5Gn z1va-(Xpkjf9dz(ZljQ=}C5Sja=zT!KH4zjy=%1)#CxiYhl;Ulq! zp|>mVHh%I)0Mw^YcDxYC@j2_?dt8WGk;Ah?2Zj`$xpo} z;p&^f;Q;aON}Z!_JD~CcDyIeIt_363wO2#DrVg0Oe2f=evyG*6BD+#hgiw-@m#ZzHJg($+j9BUa;bSLe$@Rbg<#g9 zsek!7-e-5RU|t)XH6@M50aDXckBWNOY>Uw+w2FY-OI3v$&@$4l(d?8h!?5h0E!1*C zkRwzVtfW2{^yegxsYVtQDGwCqu=HH4d`YV+BRFd;Jo55hBKcow5n-05xWJ~T&c$L; zRvI{X9+vd&5D05^JQgv$c2oZ!(D^-T*`_PmNd&1tj1GrMg(|0z+czwON)TkSuy0i(V5h+Wp!< z{Od8EP!GcTQl%$f1iGy9+TCb%GSVv5pN(TkF7#sgfV`Fcl0aulszs%0F{90bjFow1 zgOMG57zKqzz_NY3US;yRHbk`=W$kPNb^v&;>NdW;f|;Laj2D8JsJ6(uqLrH*%Nlm_ z(VD=lA4Vw^iqD?_AWH7S=8&;$?oqjFvPk0v!GI5-TRq)^ zdPd{K=ZUO{4SWd^Ux!H%fdbnPj69vFiIwtLhb(G6G_r>DK>?$PbE9!1olWP^xxyva zxZ4}v4S88E>lOQ{jSX0>`+()(hCsj;&~P0r)cYxYa~^~eSB z%i?vy5v%Xi7&cyqJia$jV_|Ml4z>*`P+Y*8@7Xah9uhrujgbmicVMkF(7Uky_r|Rd zRl8Ss4~R(IRu;rcNTPzZ8tPn69x4_<4qaEP-l0oWtD>&J16t+$ZL*HX$ml*!KihDiTfGgxgk^;#Z~a<_0JE#YX7y<< zf*fkwd=)XKpF;0WZ|92j*^`Xky|CQu+i;TKhm#D4l%*u5=Hzj!I438xzp}cV{FU!R zgmYxKbM$f(7h!G!H+ehVO1FWh+?iV9*W-+lc2p)ANR3YB1iWySy6cQC)GrZs}?)HF!HoWi5Mj3tV2y z-vZa|e@gH2qX6+Bo^il}6TVjDcOA@^^tz(on{R_Fl^&sH<|JTT*uy7jZNQ}M(=Qmh zPS|v_sjG{&sJQDFPfxE`DRM^~-1Wc{mOIVHSAY>dOK0yxp{S2B!qWVFv4ol+t~{Q<)jDi+8+G`XTLrw)dkk$+*1gc2dM~vK&g$MAh(!t_`Gay9 zL#{-iS60|$Vfe)ZpQ`39hY8~Av6v&h=!ZP}BDlbMr>$S8+JDSP8Zk4l66rDnIxFid zPw$fS(I(qHfQ@B&E|aal7aTSI_QeXmc<;jiCxFTlkWs4DF+Sj{heH)sYbeKd9tmV+ z<8@F*D(pPHOT5@;vgmTwo|EH!4@(i2xWVH{$#(AsBolSM*LfH$+zpk~d|a!8kY^QB z9s4rR)h|vgWB`4N5^m?$B=rFUh1?3 z2AegE8(|c2kpiB1o&V%orarVBe9&hInCh>Rbwy2Se!*|v1$%PY$X7LROx_3MWke-C z?}C=of%u%eMuWaud66$YhkG_J4nYshmvF@nEt^1gPa{1|-w_J5bW_E266S>Bu6YN} z&D{VMQm;?>wYvF9HVphmkKOXIY2G_m;)?FIS@sc+B3O^9K8T{Rn4lPY6Xt-aA?vrP ze+OZyxOajO%um$TX33!*k9z1AEIE=d^%;)LD*L%cxe!|zwXJ;o#1m1#K(>vzzC%!p zy9IY!@l2(un;w?GZny`9kg(|Q6GM%4a6b}r5%h76#;B+IQbBeu`EsQ=Mb&SoKI?Sf z-Hp(XBhR&8hlqXH`@}}S*%^h_o6Wkk`m-m%RM^*-E)u_;z5~JJ@1pO9CGb7;K6*cW zuV|7iD(x-rC^0+D8?MD2wdRm|#FbFlFK!VKTKt5dHVzm__o8Q9X_4T1;4UDz--Doy zWGVd8q1WZS{nlrpx=P&F&wh-^)328fLr*_j`)RvN`ugpjI&9j4sVK~kLvaw)KB?2B zJI1ckURH71u_yq|NQP%?l6?m3SO^G~#U`G_@_7NPsrVKJ&y;FSghq@0sve}gljSy| zIMzubl;t1is?euz#@%CUl-d`y>V+wyNXxAMOc37z(D!+;mQ!?P%meInq?8xgu#h^z z4qkxoHdZd9zb%8h5gPey(M2|+UOZzP^KCtOd`jcxAm;jNlnhTsrhAeL0A9 zy-1wvB_tF|8a!g6DI*vQ9t1ceot3eGug37g5Fg5`3|hAOjlZ}BtRplMmb13tZ9&$y z+9i$}tx~+g)&gndm?AyeMpP+iw#Q;PJr2snZN&ca;nH8yu;KrvmC1$|IC^3G(Ui;Mdf^QNXGgqaW~HJ=coEUo%#md z`F%6EbBh4!s8#HJBrJCY#xFk4VI@aQiY%R?IVCR~@KRD<6$sS@HbU|8+F>9rsvQ7n z>MkyD5K;X|1N~08bupcX%Je5WbA<@d(b{;mipFD zP)$F0GNoZ@vA~+l8-Sd4Eq<96t8Um@fi|3F*T-yui~7TCc2D1>y!~YYF5!EY8iKzB z%a6Y$mv}4=Pnf``4m|=(eL(0dl>R=)j?&0>tD_-5x-?Ia@I&OjZ%);h! zHmQ#SK-&WzdCpf8OhDi~c5@A&&U#;8&1&On+BDK-d6DxvDQ{`BrO@!bAm`$Tc zQJs**(Hr4c;QF3cbqni1XxRn73Ixw+>p*A_8c!O|iQiaDI=6f2iWuKoLpN|C)3nVCNXcSAtkPRk=znzwgzadhw z@M8y};pv9S1@R5qqu7+k2Lz9~H$Vm#NV>hqjF8rF?x@~Wq+0Vdgl*d=gpUU2ovAQZZM9w z;)Dipb3lf*He{%Qs6UJ?cOAQ4;sSVuB6@`Zz0;FR*Nh&5i&WD_d{|xJc_yq^f|K8e zGaQyMm*XejHCOz*NfGP^8_YVz`rGZ>THhJR#U^8w*CnI1d;*?Ix| zci~*q-oKF_rB0>GqzxW?=7^p7;^G8NL6Z94$ym%d*4PlF|0~4&A5#NAyCm(_Lspz? zFuJES4a00M7LZtHBu(P+pA^qyV!!VMj8-6%%kc|ieKF(gPF^xaeNLbjyLD`OEt^V7SzF$r!-=;V>`Zs&uq$VnB1evmGwS3E^;i<0%=nNE3Oc3<$C7nq8RBd>CD z)1Uv>y~HYYrZ%{j)mfxsH#QxCc}ul<4`=eem3^GN6?{XbE#Py2{nybV@C^zO%%{8? zZ7$hm3FyxGSu*u~z!bx?D(!hVEv zJ+P@zjvgvXi^e{glD27i5~odfFeB&mu^cK#V|>n9R?fT~e!PAb4PHWH^sIEm1~f@2 z_L^rhVqoI3?3Oi;mB(Mr#q3%K`l9649hque{#m-fH+YlI27V5PZC{QfM(_iy-$$I( z!qgpq0Z(rWG|m)e<=Ok!vaTkm4qk_Zr={wyJNO+c-DR+C`8pb>CGJ*QB@SQlL1O+c|${{hmtd4R# z{PDL7)oA{JrJcB&CJN55BCbUowFVgbpjbkOFIB|D2pmGNp|4M(hOq=fyogZ?(n?JEoCov2ZAdAU`9=a2Q3Q{@-T`%z z$-J%0%LLNipLYFiLH*(B)mtiM-&n(zlhQ&1RUh75fkcm?sl9kAuyoWqG*8fZ#7Yd7W!-)$GRupXfon?J}8+J^aq{Iq5)5fAx;>Ft`3 z(X3Fahcshf-O63LnIgZghQL_9WTs>XBa2X*8<-r7!;9ghV81DoaywZ%atM>7u%dDf zvO~0dMwH($FgL|1qV))OGtY;MxP(Hpg?F0Ed-Y;HJsDd7bc3uZVos$XLyfOm1b!Ml z@0FT87Z2EVKq!ID@=G#uO-F^&N^1)H`beV*q`eW6VvUzS=1>H9jMRU;YO-T#c3yI1 z#6i;lPbuGbc|sC|oeE$~+g1~Uu|8S8sMD~kZ)`*`g%7Ps^;{t-4KBc~hS2J8Y0Bv$ z__0}zpUF_;R;?1BGB<{wwwlgp{|KI>9=~N|V62~Ct(95WlW`-OhACe5tpVA=%igV2QMn|y4#KY?sbHQ7G}jgV^z_z2c! zGDq~DBRlk&s{r;mjO1=wp*#+v{>kDY?C1VuVvJ>g{H|5&5^5Ak;dr!tCB_d`dswCP zkxYLBfkd%vbbmhct?p*F&ooC4)|oTKI8Kg!pY;+$RKcysD{=S%kJnmqbGu}X=Z|b9 zhiC=(_BY7-qOrkP(mSUBa$;Y*m)(UkZS-6(EhwEm>8!%$+36{R9>-{{yL}J?0tY^% zE+od`UF3&m{J6Tt0qu=dtr2cRoSMPHS0uSwxbF-~cLk*>og75bE0vM+r`0Lt zSm*|cBD21$JVUP!ZpWm430a;zN^7w3Rei?6hQEWF7>3@*gai4>9XOf+cQl~*SeSrw z3OWC9`M?o($c_VY6ximbJ_P>vG_t}Zj^LNf;fic7*P0RNHCoX#!8t0Rp~X@WZuSzs z#p~*-g|q0xXH=oLYP4h201sch;U{hNl@Yx+{4gM@YD|+zFcw+=s|El6)Pix3c4yE2 z!LjkNo?YXE{rhkr>oSYR0|x>uZc%m7;$2K)+A74O=gdI_8k+AQr#$DL&s)Vkr3AdKK>5X z?N`_|mW-hL3cfPn*>AwJU%}Rz%T2ml+IT>TFW9-PWSIkA-Qr?#qBvvTERanxmkf=n zjc9y29#)9Nfc5hosuWg8?~)Z(NVeuXZ^FpmJ z2S?}~9O}DCmd18i7OE#f#Fqjab2HOYL!}O;HQtV!wJ<V7wl*SAWaVkG4JhB`^p^ot!}ml&(W$tPaU z!Uhe|vy$5;*D0n@44zqdr*r-8#a8Vlz~c}~pQ26#C7i;_R>@xmkvz=g7TP&kn3@vD z5tBNaz9J5OX1p&^Bi|#q50kx}9Vj44P0ZyRGS+O+M};`;U3GQ!NNZUq4mfITnaze| zfg24=vHV~^LV9q@J}0cHv7sMN6DIsbf9uaf@@qu<0&SMoc=&6gB$o7$ad1y#n|QIq znIJ~F=ZwjVCEJ)UT5fl>O4MJ*&JITUXQ=V8VV`%?xv{iycjz)Zr|4gV7RfqCt{qmg z!@Mux4CGwWK(_poOKCLVC2X#FR)+=Qy;gqlRZ2IgSd#)jUOlo<4)6h^G7rm1c#$Nn z9^agx^L+|&aES;ch?l67>H_CHaX9Di3VI3<*IZ(R`C|4 z7TNovzL(?9mRn|>3r<7&Q^f_`&x)~>pQmOnTjQ>eL#@hB=KIWz{3f}OqIT+Wx0`ro zLj$e|KZwgV55*KD=5D8vRp1rUYKGCvgv~2wZsT7y$FPpE@KrJE%wiVwt2Uw0vT5U= z!A}KRfjF;gZHSQFzx<$63*P+@{~TK8aL;{-ueanU@d*#yVzaIv&+@X00pp=-O?bW@ zmJ*Y8U1p~E`>QP`i$huO$C203D0Rhfdi?qy-{HO*^#a&GVjnSP7WR;E;U}mGuPRK+ z{fBnpBb*d(-w3-C5JOh77ZL`{u-Jx0> zgXnts^$yO{x4-ktt756Y z?gq|)=D*NJ9XLw!sbbg{-63T_;O|`CgHgS860;%Td>x9q9K$(uceVVok%GERhrchl8QwAi$juJv8N`#|P7VTFIX8! zFgnz|v3t`s$aa{75nJ)>1{`PjIob@i=5&~fJ#X)IT|dw3b%|%S^!%Kq{#rVHiOx+) zw+4I+H+|gF6hK(ZxL=@Efwl*XeD#6%Dx3OQ+8V)z^}AXIzJ=OBhLEw*8b3x00kk() zqA_OpcW`;(JECN8!|1E~);q0|e_H>8Gk=b5FO%?95u%~c^GAv}%Lp;yIL)6`Fczj? zttd+ftmS?k*D2VFF#Ut`Lfss7Vh7m z&FJSzlIr@3R`YcvrY+1MCjz>Cgr+ysow^KL@$bJ55D|?3kZ#pU>}i!(eX50YG{Gx$ z69d`|Ujdw|Ji$np`-^u3mecjom`~I7;;_(_i~5gf8nCUBw2X%MD&47??tdq6ABk%M zFmiAc&quftt_0qV7rG}93YP{|9GOEi@8EEj@tbgZLwO4&r{H#l8Nxg@fjlLVKBo7 zX-zD*IGX*Z#2KGnRXb|+VNa8iFh&)t`%~Iv_Z69~RrLEKy2|#eR%3cK4v4_!kGAn6 zbTu?ome-XmpWAz*1OF0rJFUE?j$e?R9X|%oQ*Z7%Uomn(4Z^B5)8D2WGBUR+(vT+( zJ{yNsguXBxBUpWimPhz)z833yCkkc!1iauz^{b>$zdbRZBZFYR9~H|0=5@4$KaY2f z@H^=GLs>W+wEBtoXc3YG?S7bUaz!3Ofl*dICavKJgKnd-=sp_rr1GLRIaKnSXz(13 zf*)yy_J8%*_tTZ0u8NbX#F9?XIR(Jm zF}e(0s%2^W>2i0Ori#Hw(cIqtsiOG-I^W2!FlJ_8Bqz0iC|DA{5vfR{Z^iZP_=(4w z97TyEJ5F?%u}1H~6=mB9KSjAo{)*m>1f{F|%ZJr~{WEUd2;E|ne;bM}CE&4%V~GCj z@1RF<@kf+b2AcT^`tUHl%V@8~67U5+e@#{eF;?(s1nxB*1G&P+-g3I34I*SX+(ak; z1Hp2TLA0#LXmhZdN*d$seNKUTlpKKFuPFK_rtUp z7_Qh?`RQM`;Tkd2&x_G)lT&|=qWVM_s#LqV@%xn1dDK$l zH!#&Fc5!)>t=X>m3M|;@*1&(mPQFb2%HYJr1pBH{s?WoboT|9E4e2 z6@0xdj00;^6yHmivqPe4h4`+{Ylzv8iR>C2VNDk{5);3YpSv5Q!1OCki(Jw46TjVG{q7Or+JL1S87dU#UcZYM1;xwJ*|^OA*2Pvb8vMI9K!hwK;`GmM zij3&YKe!Px8vHA5Vsx~%{ws2ZNH4gRdZNN1=vOoGJJshNdK>6n>*`lrK+^Ve<9rX@ zu6(1STS5l8&xX!wh~$2Rb_A^HO!r-I3)BQx^bHBa{9jB5#t5XqkNV^A)Ho zj%bzGrNO8>v;29L+>?VG2X_V{XVcu_64M4IulKaD&(c*`oP&Hdn)>@_JJ`SPwyfp6 zcGESOFv{&^qN&zp{0@tcHJ$fw(0JlXZDp>SrHI8erii{yDZ`21c{S1v1`E+!n2~OOcbUxI)QWP!FNQ67agU*!4yHY9Wv&H==Wd$tI(yd5o*{8zsoeNH5CZ5=OBbg}9>Wbr+$&+g*N zXcsT({d8eDuB$n2cj02EDLfi8*aU+5u3)n{Nep_5F7#m$SH%?+Qc?)@<8Uk*wnxWD zX=Nf$0$;y^yUB9cp;;=wbVN~i+0Zd+SMxtJGM5OJoO^r}NGt7mAX$H=A2W~{40-nQjj z$+b?|k6~G(cY%0S21Ye$6ddb4MdxP~1QI~3k_>Hqy@2zu6>~L%T5EAh{aMW{O2C$P zS&v?P83VTu3rFM47E0Lq=nCk9aLk zCdjdoQ^1;@!?S`Kj?$y$vb5V7?ooMG*=wDYr|IxbbF9Bk(j&QSmSfNMc%$+Y{G5YU zrMKzgt9-w;oFDIZjMFJ2Ky>NF6?yEy5;>=$n&oi$P`(?Dx!nlAMXUKEzdh$tXa$E) z&>Os$DUxrim@)Zv6;o=qy&W3%0Rwhg)Ss&lgwWrK<_$A^uEBxdMG;476 zz*o4n`MB8OM~~3H(JMaJ0%?nl8^XN{7Yr_lZz9}4gdEA*B%GXQq_r|ju38>r^ZG+C zwj95SRDj6|MmeU@}})kn$OVUc8h& zdXdb@>9kz!wJ9$I$?jf3eF+R`Xi5L(e0|9A=-!9?dW=^2x}HqW%()&3+YbUsTg=h& zor6D!@flv`2$|Q_0 ztKCl^@8aI4s2vAj?Rx3K1!v0Y58Urb2%)&Cir#IhRd`o~WxfScqr}y6=9d;@6tFsQ z(+i}Pv-1_9^RlcDg>!f}%kUTGpeth)0tD1eA|kg5o;^*g;;%kPn@aCK2=L_Tqb^3< zw$y73&2an;x*)T}ngB)X+0;Xxq4gl@ub6xD5y#>c^Q)_@U7bp*D~do6 z5%#rJ8Me_YebuJ^Ttu*S4pVB;WN<_iF=uBYW}@MfWZbp7)UwcNhP86t2ALDv<%+`? zo{4*!RwoMi$PakH1TFExkSG`7OQtbN!aH7B#XF&)&cfivqbw}KG}9WR@Dt%FDGxr0c>M6UQ*{|(>MlGC3i}W~q zT(98;pHy2R_7tOl(Uugw3)C0BsVE24pDx;Y(BDfH!hGXrPg$c$d0wX{mt>~rsS`l8 zFDeWAoJf(f3S50N?Kri%>_fn1IsPwO@HlpvKtRbgP5Hh;T1Orwf&nD1uXn$JH zTv!`l7!K*X5#+!oZXX1|nzU?8KnfOW@*!&h$1$?U9$MjRo!V;LX4Vq%-_-$&Vog<9 zqimD4RlJ&5JW`m1ZNc<3NO+*y6-JXeU!hj?VgpJr?>T<_GVw-(v^+&Cto-wo*kB8go~Jc$hkp~g3KE7Vef+7H zTg%td*-jzzE(!{e>{Y>bU4li*RU#BFfX~a82#mkD`8cR!Mfd=g;Y;g845L_nl*=VR zVV_w5D{DdDkS5Yu(ze00Vv{EDpIj;z-;t5NS3ILp+RZ-qSg|Eos@xK&DEY9$iRIQqml^mX(qem1ElrT?t z6c=$&ZvgN79GZ<>1NJb}i%(|iwkq2$P7de~lHB0e)40wdRNM_ooqBmjp7g1mS^Bz5WTPVAn%*W!#IK*#R+q^tg$xjYPJWL6_A{ zOb%JedEEUwQ@V2sT$SCwE9xHP?^W6T+f%yNF#C77?qQZ+m9xKxt}ytQ&rcrAO&reL zwI0qN($(5N@Zn}nrhR^&F4aC&9R4eGd6?`~e(2w&E*&~_XlHi1n9utw)NS@0OIytB zCV2S=^k!c|mv8)KJ4ZYNEwdXE)3CPRqbp+eY-R^p)FWu$(?1+>hwSs~=JAiwRwski z(Uvv7=lbtDpSzxBu#V_qo#j@U9P0UwksT-&6BkcP0mtoUNJ%x;;LSGUZIzW$u2w?CvE} zyDtf9O%JYl)pyagP(QhdK$zf?HIUO)yX2()S-Qg?71kig+;pt_Ke*Y$A_#pgQcfO|&U`zJRk zn^x6MI^kd%)OybB?;`{=61v912QGrFNfZ3;<@YjA_-R_tojLC=t0&Y$H2fr8#SI+= zN)}-GE}tL?^pxkWs`fmsO{*C6;||2^(al;w{9Gp;*4GYVZ2ljq%RtEoW9IA%v7dLx z8WwcOTC;zwnDakra~O$m;;O>Dd+0iJEK|9uLjN7|4snn-8r|pV&Au-#3#_U$eU3Ij`l}lzv!y7#r|C^-2}-Om{g>o!X4U%S%XCF7 zB`$Lr!VzE4WI~tep4l3;NZOGBn>teAU+jo(IBL=Id@WyzdG z&gmAq)Qdc1wpC)kht}I`qnRyr$8V=g*gWknF92i(-(#Pdt+2C?@Jj6yqS zZ5i>{ZPNiW*DW9~=p(f*xj3`6to+v4%Z8N}^?qqzwGsI+^2kd|cn@}x-$JO-%z1*T z6?9VFzMr>gY*katuSxNw8bsn3=}K`}R5OE~VM)MMO?x@J_aQMnJ#jJf6s6xg?B1(} z)^E@yYOGY|LthX^!OkYl4=lfw-;{x?YWh30Q3dTxCe}e@d3h?LPyZj`;WmwTA+xJ$ zF~7xP?oygbd zl1S^xn#rhv-=GcLR^qmqP30_J(^^{9iq5~LD>1OYpX`$ma{ep1gytcB=5iFWU$^96 zO&6KrMVX;$zVw$S-9AVmtgwmaXj3KXjx$p^;dj%{m^NOHMa7y%cq@*w0lG4t{+bC& zIoY41EpW=Ylv8s%FsqNbqt?dy(O$X;cl@$iDuwmY=B#{|@*O`*SEs~D%lG*er{0(M zAh?tbf&O9Fi(~FtGkEHj^qQ;6FA~mFbTgHAHiW%qT(9!>bJ%N^u82itvvy{9!7tO* ze5o+26|gQaFk2Y|c5KIJ&7!2Y-lQ4WR`hxiz74dmzY zrCeD-Y#6Rg`hR88awt-9(#Ld&GG361L;MVFv@u}6ZRQcEO7O>Cai3~g_@7X>#x>%3 zT3HyP1pigK!Y;5XarLKBjiai0^B>XWZjLHs*Q<1+u_thPCPG&+$mK0Yj{lu0gOsPo z@DiL1a+Ka`Et@l4$GZ|k)Vzvsbz1=mo#{G`xIr*~wPDXVQ149{q~?>k&ka&T5Hh}! zg_J>RUdf^xBm!*Br?W(Fv58DslosiC>Jt7N7br>Kd4=i0L#(MO2>Ky(RHXda*O19WXL2=wt z-xedEjn z*X^C6i{;v9`GG%8+iGLvrXr%8(0l1k#$S**iGXjAw)wX&NSSx|_1H2hIRu8SDCPy58NR;8JE+FR&-Iuz0k~@V%}~CfwJ@w@L=jXk!_xc@Oo3 zvOEhN(26VmhK(H>{5kc8zhn*Lu>wz3apU}-8kWO53MX~L{8bw=rC<~6v(Kww;IWeQfCuu9T5tZc2>dB470Txa8 z8ogC-Fm(w+axwL;m?O9xQoj5MrvGKSAu&cgE570&H_@O=_VupDNX0+%_7d|APff2l z1ngN{FDWqVgrWK}9KFTZnJTi1>=r-%q_6gT!#S3=@&_ z`g-PS7(q0IU2!$vpyBX1vLJ$1De2E)Uq`*)$2GY9L#{AtOxZM?&PNi~R#@Bki8EcV z<`9Rga_jwmIuQO+-FhRTQ)b0KL_;-=?K~giwg|hr1%L0E4l3@Hj6olIeWzwrg0xfn z@au(dnXx~3W@F>TLQOJl-9Pqv$1Z~xKYE5^$Mwv#b^kcZ>eoVldWn#ouwgfcZ$C&k zhrd)Hkl3xntYJU!dSOroz8^ZXu_G0?%-BDCX5?plPaz~7jDLW3?$xSMfoSo(9iCUC zjBsE!IZXZ8W3kpz{ZKd4UZ9wB2_;0IZpv>0l_m>4RR8^T+T*uR3>l9)mm5z+VLuI( z9ni`bzfr|iK1KWd_K8&*1VO?tVh z{BhufYue-&D;zJ>lbXi+E9yggR~JAuTxW9mfva-c)!Y2r;|gsSqB?J(s^{z|*-zK; zkyljeT^_J_C?oa$6IAu=frhWTCp7$+LZ7vCRsC#ZV_)zF{;=vHV)p?f7(7BF{?Vo3 zFMhW*nHA1?>KdD4dJ7_0{kC}OqHzdeut~A#3G=Q;!Vncx#jHUcn z8t#P(62WGY_~5CCrGNZ-Rf;ld?2ia#1$l>-x?&Iw+EiTgb5$7R%HVBEKqb)r77bOj z$DLA8?V!IwV-*KYza&s;xdk#suq`<6vwjF&r0>KkBQ9BfyqIZmM{%G^%Q=ue#%NC! zRy(g_lm-&QKAtlj$i*x+*4KAFhI^8BCx&x}p;sAd80{q8niwsn)_~}^=)GTe$rBaj z7dt?ElEcSuUevJMC+Ox3cMR0@sIqcAKfcm2&r@HwdDefLi7!CkD#!R8GMJS? z0#y$4n{-pgo&r!+zpi&=yTXFh_e#M28Zs=8&d%mhmSw{1B@2lh^qm7$)vH(asfx17 zoiAZUPK)i4qwT!oiV2p=Z6cSVx|v_1qcKY8TEHvyR=vHtFo*J%bGaG)V=6b1Ux<^= znNib#kp2K`8P0W@1vI1WsLJG8J5^6SCuN1-h+Z@VjamXH)h#JL$SA zx8+wYiT3kldRvwKlW7gnD5q%A8Uoq(=&$w_JErOlT`{a=h*D*6R z^w%--V`n}yQ|;@R`D153Gn3fsnE5ze*Eds~%S(w`G5RH}#m6OVI$J6X^a*Evx@Mn9 z3l8~E^=3NreNT>DjNYefo|A7>?4xf~B@guJl6NI0 zhx!-48)ReKSsbXZuMO+iOFI&SX_89(LP7TNsYL!NZBLA(G88bW2#+sNZ=$zz%qUN; zfJC~A+vxhlIKj>OO56B6ZAlEExm}fdK0`YbJ+p3ART}HFsR-u34peD`hf@F%3!P_U z24m>0DFfgnqf$+kR`6)b9>T(1l}7m8ln8e+h+lpiKSwtvP9@IdDq`nHX=`E-;C3~L z{Uy3K(bae6ml0un3PUL~YdoUjqCY~{C1&=^MpT0S=TZn7Q=7U2m3n_q%D!u$<5yA= zBqEbpYA;k;!7X&1pRX7u0N_ewrT%?1n%&?3C7uacY2Xps?_*%X$nz8&zn${GY;2e0 zyq~5$20eUloNtX(E2q@nnZ~Frgc`$_W+hOZqrnmli3kLd)v2TGlnrSrpPldB~}*b-kOY!kSr)b!}z!tdai$ zRXqS(jmZIisrms}olOq#Dcb8Ju78j|mH2J4(ZVA45Sm9gTxQIuQKdmYU;ReeN=k0@ z7ilC}$aTRo8|Sfrc^_VZ%wCv5pb~Aa(khhN4v`^vH;u+8tAIo}!Z7J0c(Kr7)#B?I zSX}}!5ZLUch2%4dSu3__mhm0BMZUY{MPg~y?Eb#jF>u-4-z!NZ0m!p<&**0op%4ol zFFWkF*1TTul4<~Ps!6!b*x&&-HIL&xK;6VXeEW=lYLY=K@xpDGdL<*113$XFAt^);bsO z>kQB9A8Vb9_jM+7Nh#Aa!1=IJYt^{%PqassTV<6bys~J#Scyed& z_`agO5m5Ew|Fzb+1Od)$u79X?u4HB8s`vHJHP4l(L|pY;|6c1{48t=-w!b}-xz3R3 z{avkd3BjHjZhVt&$S~5XajB|V@&&p+dkjd;G7bFNL<;a!vpxtYQ{ zqo6>cSfl6Q#;h@FF{bXw;7QntcTGZpn_3w()2E>K9LA}-8Akf_nm|hJ(F!x%PQz8% zbD&f2MtAlRsXO5>X@6Ct+Bkd-L;n#CRW&qh=cs66rS<-5l~BOB)-dY(=;o@HIuyR6 zP-(Hps$4A4u7<_FOrupTR*|`efq#w0lLNa%A1lry&w+Pvu2mVPq6qhFl`w%RQNz;5 zsvI@E)L-fRK2tSO>ouL)iTX~uvns~KY(q@G+NZdq>M6{XtJkf0Yw04f zDlA^5-YVTn3NejR+N<>HW#aJYSD^3K-B$N5{Bs^&82WcS;eH?fZlTtxLVjj)M}A@k zU)@Ws$Uiz%oE*td5nXfjPTO? asAci!d|q38wU=5Jmge&%{_U*Ji~b)tnJk+C diff --git a/.metadata/.plugins/org.eclipse.jdt.core/1870255979.index b/.metadata/.plugins/org.eclipse.jdt.core/1870255979.index deleted file mode 100644 index 4e7c5a6500b0314df7a0b5f5bec2b9227d62e7f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2857219 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 z�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

(>RsZrDC`764zcL*Q0*Z(|19WAL7TizrFd^f86 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%0DL&(R=f$FXz6K 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

    9Uilqt4*q7=f{Hdpp(-;gXt29a+SR6jW=4ss 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

    Ky|=zy~w;7 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

    _> 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

    Or#rBMr1u=uq#ng?~9DJ2_iVXeX|3c2t*c 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 z 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