From a8af0c0ee691c4a68899e32ca827e6f95308e594 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Mon, 20 Jul 2015 18:23:02 +0200 Subject: [PATCH] Added support for name coloring by town (using Towny). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Write the town name to autoflairconfig.txt followed by the color codes. Example: test §2§5 will give me §2Norbi§r§5Peti§r Also made some bugfixes. --- .metadata/.log | 234 ++++++++++ .metadata/.mylyn/.tasks.xml.zip | Bin 250 -> 250 bytes .metadata/.mylyn/tasks.xml.zip | Bin 250 -> 250 bytes .../0/4026a562ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../1/10092140c52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../10/e03d4f54f62e001511a3ba75618c68e5 | 383 +++++++++++++++++ .../11/302d82aec52e001511a3ba75618c68e5 | 312 ++++++++++++++ .../11/703abcfff12e001511a3ba75618c68e5 | 371 ++++++++++++++++ .../13/604732c5f52e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../13/b00ee04cc72e001511a3ba75618c68e5 | 319 ++++++++++++++ .../14/d01b6d05f52e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../15/20b3105acf2e001511a3ba75618c68e5 | 92 ++++ .../15/4032ab5dbf2e001511a3ba75618c68e5 | 64 +++ .../15/602ef8eded2e001511a3ba75618c68e5 | 337 +++++++++++++++ .../15/905b71c7ed2e001511a3ba75618c68e5 | 336 +++++++++++++++ .../16/b03d628ac42e001511a3ba75618c68e5 | 294 +++++++++++++ .../18/2072884bc02e001511a3ba75618c68e5 | 292 +++++++++++++ .../18/a075b55fc92e001511a3ba75618c68e5 | 333 +++++++++++++++ .../18/e00b6b58ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../18/e024139bf02e001511a3ba75618c68e5 | 354 ++++++++++++++++ .../18/e07d8480f52e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../1a/a09f2e39c52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../1a/c0cfb22dc02e001511a3ba75618c68e5 | 292 +++++++++++++ .../1b/f0224de8f62e001511a3ba75618c68e5 | 384 +++++++++++++++++ .../1c/6074bf28f12e001511a3ba75618c68e5 | 361 ++++++++++++++++ .../1e/10a41e97ee2e001511a3ba75618c68e5 | 341 +++++++++++++++ .../1e/504c9d52ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../1f/2028de3fcf2e001511a3ba75618c68e5 | 85 ++++ .../1f/b00d77f0c42e001511a3ba75618c68e5 | 307 ++++++++++++++ .../2/c07312e9bf2e001511a3ba75618c68e5 | 291 +++++++++++++ .../20/a0f94f72cf2e001511a3ba75618c68e5 | 94 +++++ .../21/6079da59fa2e001511a3ba75618c68e5 | 391 +++++++++++++++++ .../21/9091585acf2e001511a3ba75618c68e5 | 92 ++++ .../22/a0bbe40cc52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../23/40423b2bcf2e001511a3ba75618c68e5 | 67 +++ .../23/60878d1afb2e001511a3ba75618c68e5 | 397 +++++++++++++++++ .../23/a0089f13c62e001511a3ba75618c68e5 | 312 ++++++++++++++ .../24/205b7a17d32e001511a3ba75618c68e5 | 335 +++++++++++++++ .../24/60c0f732f92e001511a3ba75618c68e5 | 389 +++++++++++++++++ .../24/b0050f65c02e001511a3ba75618c68e5 | 292 +++++++++++++ .../26/d01f259ef02e001511a3ba75618c68e5 | 355 ++++++++++++++++ .../27/7096e0b1f12e001511a3ba75618c68e5 | 370 ++++++++++++++++ .../2a/20defcdbc72e001511a3ba75618c68e5 | 322 ++++++++++++++ .../2a/304ef98cc22e001511a3ba75618c68e5 | 294 +++++++++++++ .../2b/b071b16acf2e001511a3ba75618c68e5 | 93 ++++ .../2c/20ac6667d22e001511a3ba75618c68e5 | 99 +++++ .../2d/20ebe2afc42e001511a3ba75618c68e5 | 294 +++++++++++++ .../2e/204539a2c72e001511a3ba75618c68e5 | 321 ++++++++++++++ .../2f/60c08aa1ed2e001511a3ba75618c68e5 | 335 +++++++++++++++ .../3/60b156f3ed2e001511a3ba75618c68e5 | 337 +++++++++++++++ .../30/a046033cc92e001511a3ba75618c68e5 | 332 +++++++++++++++ .../32/306725aec52e001511a3ba75618c68e5 | 311 ++++++++++++++ .../32/60416866f22e001511a3ba75618c68e5 | 378 +++++++++++++++++ .../32/e0bd8a0af82e001511a3ba75618c68e5 | 108 +++++ .../33/307f3ebec52e001511a3ba75618c68e5 | 312 ++++++++++++++ .../33/e0e8f0d9c42e001511a3ba75618c68e5 | 299 +++++++++++++ .../34/20530121c82e001511a3ba75618c68e5 | 323 ++++++++++++++ .../34/2066c3cdc82e001511a3ba75618c68e5 | 326 ++++++++++++++ .../35/20ec61bbc52e001511a3ba75618c68e5 | 312 ++++++++++++++ .../35/a0d28e1ac92e001511a3ba75618c68e5 | 327 ++++++++++++++ .../35/d0feddc3f12e001511a3ba75618c68e5 | 373 ++++++++++++++++ .../37/400d6ebfbf2e001511a3ba75618c68e5 | 287 +++++++++++++ .../38/30ed4da8d12e001511a3ba75618c68e5 | 98 +++++ .../38/609a0a5fef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../39/7076fe6ff92e001511a3ba75618c68e5 | 389 +++++++++++++++++ .../3a/300567b8d12e001511a3ba75618c68e5 | 334 +++++++++++++++ .../3a/f0edd7def02e001511a3ba75618c68e5 | 360 ++++++++++++++++ .../3c/100230c7c72e001511a3ba75618c68e5 | 322 ++++++++++++++ .../3d/2034d8fed22e001511a3ba75618c68e5 | 105 +++++ .../3d/b0b429e1c52e001511a3ba75618c68e5 | 312 ++++++++++++++ .../3e/501e53c6c12e001511a3ba75618c68e5 | 294 +++++++++++++ .../3e/d041c107f12e001511a3ba75618c68e5 | 361 ++++++++++++++++ .../3e/f09f99a6f12e001511a3ba75618c68e5 | 369 ++++++++++++++++ .../3f/90d2ea4ac02e001511a3ba75618c68e5 | 292 +++++++++++++ .../3f/d0ae2988f02e001511a3ba75618c68e5 | 354 ++++++++++++++++ .../3f/f076feeff32e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../4/3024cc05d32e001511a3ba75618c68e5 | 106 +++++ .../40/60fa6e10f22e001511a3ba75618c68e5 | 374 ++++++++++++++++ .../40/e0ff0e3eef2e001511a3ba75618c68e5 | 342 +++++++++++++++ .../41/2061287bcf2e001511a3ba75618c68e5 | 94 +++++ .../42/e062ef3ef12e001511a3ba75618c68e5 | 368 ++++++++++++++++ .../44/60baddbded2e001511a3ba75618c68e5 | 336 +++++++++++++++ .../44/a0066f16c82e001511a3ba75618c68e5 | 323 ++++++++++++++ .../45/e004d2d0f82e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../46/2068e749c72e001511a3ba75618c68e5 | 314 ++++++++++++++ .../46/206c822bc92e001511a3ba75618c68e5 | 332 +++++++++++++++ .../46/e0388548ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../47/8013b362f02e001511a3ba75618c68e5 | 353 ++++++++++++++++ .../47/a0a57ff6bf2e001511a3ba75618c68e5 | 292 +++++++++++++ .../48/00ffdb60ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../49/20448ca9d22e001511a3ba75618c68e5 | 101 +++++ .../49/208701fac42e001511a3ba75618c68e5 | 307 ++++++++++++++ .../4a/20621c6bc72e001511a3ba75618c68e5 | 319 ++++++++++++++ .../4a/30a94cffc42e001511a3ba75618c68e5 | 307 ++++++++++++++ .../4b/705083c4fa2e001511a3ba75618c68e5 | 393 +++++++++++++++++ .../4b/f0e8f6d8fa2e001511a3ba75618c68e5 | 397 +++++++++++++++++ .../4c/60dfd6bffa2e001511a3ba75618c68e5 | 392 +++++++++++++++++ .../4c/b0f836d6c52e001511a3ba75618c68e5 | 312 ++++++++++++++ .../4d/601ac327ee2e001511a3ba75618c68e5 | 338 +++++++++++++++ .../4f/60f90ef1ef2e001511a3ba75618c68e5 | 348 +++++++++++++++ .../4f/e0992796ee2e001511a3ba75618c68e5 | 340 +++++++++++++++ .../5/20f29cc9c12e001511a3ba75618c68e5 | 294 +++++++++++++ .../51/c08e14f8c52e001511a3ba75618c68e5 | 311 ++++++++++++++ .../52/e033be44f12e001511a3ba75618c68e5 | 368 ++++++++++++++++ .../52/e07bf409f92e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../52/e098cc7eee2e001511a3ba75618c68e5 | 338 +++++++++++++++ .../53/2088f35ac62e001511a3ba75618c68e5 | 314 ++++++++++++++ .../53/60a94d43f02e001511a3ba75618c68e5 | 352 ++++++++++++++++ .../53/e0c3c4b6f22e001511a3ba75618c68e5 | 378 +++++++++++++++++ .../53/e0e025b8fa2e001511a3ba75618c68e5 | 391 +++++++++++++++++ .../54/a08c9aaec42e001511a3ba75618c68e5 | 294 +++++++++++++ .../55/108abd59cf2e001511a3ba75618c68e5 | 92 ++++ .../56/600fc5d9ef2e001511a3ba75618c68e5 | 347 +++++++++++++++ .../58/306a8bbfc82e001511a3ba75618c68e5 | 326 ++++++++++++++ .../58/60ed80d2f82e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../5a/807ce202f92e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../5b/c04677b1c42e001511a3ba75618c68e5 | 294 +++++++++++++ .../5b/e0bdb4c2ed2e001511a3ba75618c68e5 | 336 +++++++++++++++ .../5b/e0c3bfdabf2e001511a3ba75618c68e5 | 288 +++++++++++++ .../5c/20130c91c92e001511a3ba75618c68e5 | 333 +++++++++++++++ .../5c/501d5bcfed2e001511a3ba75618c68e5 | 335 +++++++++++++++ .../5d/e022cf5fef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../5f/20fb7c76c72e001511a3ba75618c68e5 | 321 ++++++++++++++ .../6/30c2f2eec52e001511a3ba75618c68e5 | 315 ++++++++++++++ .../61/60e73961f82e001511a3ba75618c68e5 | 115 +++++ .../62/b0ef74cace2e001511a3ba75618c68e5 | 329 +++++++++++++++ .../63/70033eb0c42e001511a3ba75618c68e5 | 294 +++++++++++++ .../63/a0335f19c62e001511a3ba75618c68e5 | 313 ++++++++++++++ .../64/f003f832f82e001511a3ba75618c68e5 | 112 +++++ .../64/f0a40a23fa2e001511a3ba75618c68e5 | 391 +++++++++++++++++ .../65/a0018c88c52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../67/b0a2021dd22e001511a3ba75618c68e5 | 334 +++++++++++++++ .../69/a0742e97c42e001511a3ba75618c68e5 | 294 +++++++++++++ .../69/a09f55a6d12e001511a3ba75618c68e5 | 98 +++++ .../6a/a041c51ecf2e001511a3ba75618c68e5 | 64 +++ .../6a/a0a9b7c0d22e001511a3ba75618c68e5 | 101 +++++ .../6c/20839ed9c42e001511a3ba75618c68e5 | 299 +++++++++++++ .../6c/b0c9b7a0d12e001511a3ba75618c68e5 | 97 +++++ .../6d/20da2322c82e001511a3ba75618c68e5 | 323 ++++++++++++++ .../6f/7051f7cef82e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../6f/e0adbb55f02e001511a3ba75618c68e5 | 352 ++++++++++++++++ .../7/20e4b24fcf2e001511a3ba75618c68e5 | 85 ++++ .../7/30377337c92e001511a3ba75618c68e5 | 332 +++++++++++++++ .../7/a0481e0ac52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../74/20c870fec42e001511a3ba75618c68e5 | 307 ++++++++++++++ .../74/30231013d32e001511a3ba75618c68e5 | 335 +++++++++++++++ .../74/b044220ec52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../76/606cb261f02e001511a3ba75618c68e5 | 353 ++++++++++++++++ .../76/609ffee6f52e001511a3ba75618c68e5 | 383 +++++++++++++++++ .../76/7043c1cded2e001511a3ba75618c68e5 | 336 +++++++++++++++ .../77/207e8f0bc02e001511a3ba75618c68e5 | 63 +++ .../77/6089e238ef2e001511a3ba75618c68e5 | 341 +++++++++++++++ .../77/70d77550fa2e001511a3ba75618c68e5 | 391 +++++++++++++++++ .../78/d07f6c71c12e001511a3ba75618c68e5 | 293 +++++++++++++ .../79/003d5ea2ed2e001511a3ba75618c68e5 | 335 +++++++++++++++ .../79/e003d641f82e001511a3ba75618c68e5 | 112 +++++ .../7a/606aad24f82e001511a3ba75618c68e5 | 111 +++++ .../7a/80cff965ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../7a/e04691cdfa2e001511a3ba75618c68e5 | 398 ++++++++++++++++++ .../7b/402ae40dc52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../7b/6014043bf02e001511a3ba75618c68e5 | 351 +++++++++++++++ .../7c/201f6405c92e001511a3ba75618c68e5 | 326 ++++++++++++++ .../7c/2055c958c62e001511a3ba75618c68e5 | 313 ++++++++++++++ .../7c/6026172bf92e001511a3ba75618c68e5 | 387 +++++++++++++++++ .../7d/202437fbc82e001511a3ba75618c68e5 | 326 ++++++++++++++ .../7d/b01607f8c42e001511a3ba75618c68e5 | 307 ++++++++++++++ .../7e/10cadbb0c42e001511a3ba75618c68e5 | 294 +++++++++++++ .../7e/500698dcbf2e001511a3ba75618c68e5 | 288 +++++++++++++ .../7e/60a3a83aef2e001511a3ba75618c68e5 | 344 +++++++++++++++ .../7f/702359e9f02e001511a3ba75618c68e5 | 360 ++++++++++++++++ .../7f/7097cde3b82e001511a3ba75618c68e5 | 63 +++ .../8/2023cbe9c42e001511a3ba75618c68e5 | 300 +++++++++++++ .../8/60032e9cf32e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../8/6022721bf82e001511a3ba75618c68e5 | 110 +++++ .../8/e0108b91fa2e001511a3ba75618c68e5 | 391 +++++++++++++++++ .../80/20e2900fc02e001511a3ba75618c68e5 | 64 +++ .../80/6030fe14fb2e001511a3ba75618c68e5 | 397 +++++++++++++++++ .../81/207849dec52e001511a3ba75618c68e5 | 311 ++++++++++++++ .../81/a0d37509c52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../81/a0e017eec72e001511a3ba75618c68e5 | 322 ++++++++++++++ .../84/20ae50cfce2e001511a3ba75618c68e5 | 329 +++++++++++++++ .../84/e0cafcb5f02e001511a3ba75618c68e5 | 355 ++++++++++++++++ .../85/7082ce5ff62e001511a3ba75618c68e5 | 383 +++++++++++++++++ .../85/e0142d0af52e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../85/e0445a04f82e001511a3ba75618c68e5 | 108 +++++ .../87/c0ee9e2cc02e001511a3ba75618c68e5 | 292 +++++++++++++ .../87/e0091494f32e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../89/e09bd143ef2e001511a3ba75618c68e5 | 342 +++++++++++++++ .../8b/b08c1511c82e001511a3ba75618c68e5 | 323 ++++++++++++++ .../8b/d0c1d07df02e001511a3ba75618c68e5 | 353 ++++++++++++++++ .../8b/e0e354c4ee2e001511a3ba75618c68e5 | 341 +++++++++++++++ .../8c/60ddc035f72e001511a3ba75618c68e5 | 384 +++++++++++++++++ .../8d/60bb3fa1f22e001511a3ba75618c68e5 | 378 +++++++++++++++++ .../8d/e0e833fff72e001511a3ba75618c68e5 | 108 +++++ .../8e/20ff3826c62e001511a3ba75618c68e5 | 313 ++++++++++++++ .../8f/205432bcc82e001511a3ba75618c68e5 | 324 ++++++++++++++ .../9/a0706393c92e001511a3ba75618c68e5 | 330 +++++++++++++++ .../90/308d0ce3bf2e001511a3ba75618c68e5 | 291 +++++++++++++ .../90/6069aa58f02e001511a3ba75618c68e5 | 352 ++++++++++++++++ .../90/e0c2706bf72e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../91/a005e2c5c42e001511a3ba75618c68e5 | 299 +++++++++++++ .../92/60ec4bcded2e001511a3ba75618c68e5 | 337 +++++++++++++++ .../92/c0e52982cf2e001511a3ba75618c68e5 | 94 +++++ .../93/b0d3830fc92e001511a3ba75618c68e5 | 327 ++++++++++++++ .../93/b0d47969d22e001511a3ba75618c68e5 | 100 +++++ .../98/b0f95768c12e001511a3ba75618c68e5 | 293 +++++++++++++ .../98/e00fcf2df82e001511a3ba75618c68e5 | 111 +++++ .../99/603c843af82e001511a3ba75618c68e5 | 112 +++++ .../99/a045560ec82e001511a3ba75618c68e5 | 322 ++++++++++++++ .../99/e0cf6ed0f02e001511a3ba75618c68e5 | 356 ++++++++++++++++ .../9a/e0576b12f82e001511a3ba75618c68e5 | 111 +++++ .../9d/60c3c8dcf82e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../a/80754cfbf72e001511a3ba75618c68e5 | 107 +++++ .../a/e0a46b3df82e001511a3ba75618c68e5 | 112 +++++ .../a0/e0c38940ef2e001511a3ba75618c68e5 | 341 +++++++++++++++ .../a1/302a6e59d22e001511a3ba75618c68e5 | 99 +++++ .../a3/70684cbef22e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../a3/a0b004efd22e001511a3ba75618c68e5 | 335 +++++++++++++++ .../a4/605a1b57ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../a5/a032f69ec82e001511a3ba75618c68e5 | 322 ++++++++++++++ .../a6/30615366ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../a7/7048aedcf62e001511a3ba75618c68e5 | 383 +++++++++++++++++ .../a7/a0feefeac52e001511a3ba75618c68e5 | 312 ++++++++++++++ .../a8/20776c1dc92e001511a3ba75618c68e5 | 333 +++++++++++++++ .../a9/600d733bf12e001511a3ba75618c68e5 | 365 ++++++++++++++++ .../a9/f0f38415f82e001511a3ba75618c68e5 | 112 +++++ .../aa/b0d2228ec52e001511a3ba75618c68e5 | 310 ++++++++++++++ .../aa/e0af633fee2e001511a3ba75618c68e5 | 338 +++++++++++++++ .../ab/2091a3e5d22e001511a3ba75618c68e5 | 335 +++++++++++++++ .../ab/20d4c998cf2e001511a3ba75618c68e5 | 97 +++++ .../ab/60ddb85af82e001511a3ba75618c68e5 | 112 +++++ .../ab/e0241976f62e001511a3ba75618c68e5 | 383 +++++++++++++++++ .../ac/209cc836c52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../ac/e05e031af22e001511a3ba75618c68e5 | 376 +++++++++++++++++ .../ae/60376ea0ee2e001511a3ba75618c68e5 | 341 +++++++++++++++ .../af/00b3c459f02e001511a3ba75618c68e5 | 352 ++++++++++++++++ .../af/a0a41840c52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../af/e01790d7f82e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../b/50330699ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../b1/204e43add12e001511a3ba75618c68e5 | 98 +++++ .../b2/e02b9ea1ee2e001511a3ba75618c68e5 | 341 +++++++++++++++ .../b3/20455670d22e001511a3ba75618c68e5 | 100 +++++ .../b3/b0196cc5c12e001511a3ba75618c68e5 | 294 +++++++++++++ .../b4/a0608155c72e001511a3ba75618c68e5 | 319 ++++++++++++++ .../b6/604a1fa6f22e001511a3ba75618c68e5 | 378 +++++++++++++++++ .../b6/609d3f28ee2e001511a3ba75618c68e5 | 338 +++++++++++++++ .../b6/e0d9140ff82e001511a3ba75618c68e5 | 111 +++++ .../b7/a002ab6dcf2e001511a3ba75618c68e5 | 93 ++++ .../b8/108b64cac52e001511a3ba75618c68e5 | 304 +++++++++++++ .../b8/b00f8654d22e001511a3ba75618c68e5 | 98 +++++ .../b9/20a7d70dc52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../b9/40c2f665ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../ba/d013f5efc12e001511a3ba75618c68e5 | 294 +++++++++++++ .../bb/30c1a2d8c82e001511a3ba75618c68e5 | 326 ++++++++++++++ .../bb/600ef5ddf82e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../bb/b00f19f8d22e001511a3ba75618c68e5 | 101 +++++ .../bb/e0bd71c4f22e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../bc/e06e426ff82e001511a3ba75618c68e5 | 116 +++++ .../be/206ef6f9c52e001511a3ba75618c68e5 | 312 ++++++++++++++ .../bf/30eef93ec52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../bf/40b7a880bf2e001511a3ba75618c68e5 | 64 +++ .../bf/a0c81b95c12e001511a3ba75618c68e5 | 293 +++++++++++++ .../c/206bd40cc92e001511a3ba75618c68e5 | 327 ++++++++++++++ .../c/a03dc224c62e001511a3ba75618c68e5 | 313 ++++++++++++++ .../c/a0bbdf39cf2e001511a3ba75618c68e5 | 70 +++ .../c0/2087239bc52e001511a3ba75618c68e5 | 311 ++++++++++++++ .../c0/609e9b12f22e001511a3ba75618c68e5 | 376 +++++++++++++++++ .../c0/e0ca4cccf82e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../c1/402ed649c02e001511a3ba75618c68e5 | 292 +++++++++++++ .../c3/709abd11f22e001511a3ba75618c68e5 | 375 +++++++++++++++++ .../c3/90b90e40c52e001511a3ba75618c68e5 | 307 ++++++++++++++ .../c4/30128891cf2e001511a3ba75618c68e5 | 95 +++++ .../c4/60544486ed2e001511a3ba75618c68e5 | 335 +++++++++++++++ .../c4/e0191ea8ed2e001511a3ba75618c68e5 | 336 +++++++++++++++ .../c5/205ef9e6c72e001511a3ba75618c68e5 | 322 ++++++++++++++ .../c6/508d4163ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../c6/70f7bb04f92e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../c6/e0f20f06f22e001511a3ba75618c68e5 | 372 ++++++++++++++++ .../c7/3015ce54d22e001511a3ba75618c68e5 | 98 +++++ .../c7/e0524424f92e001511a3ba75618c68e5 | 386 +++++++++++++++++ .../c7/f0d24c00f82e001511a3ba75618c68e5 | 108 +++++ .../c8/2097812fd22e001511a3ba75618c68e5 | 335 +++++++++++++++ .../ca/c067eb62d32e001511a3ba75618c68e5 | 335 +++++++++++++++ .../cb/e00c8ff2f32e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../cc/10137161ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../cc/306aac51cf2e001511a3ba75618c68e5 | 92 ++++ .../cc/60cf3d08f22e001511a3ba75618c68e5 | 373 ++++++++++++++++ .../d/a0a4134fd42e001511a3ba75618c68e5 | 335 +++++++++++++++ .../d0/20e069c0c42e001511a3ba75618c68e5 | 294 +++++++++++++ .../d0/e00161a0f72e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../d0/e03bfec4f12e001511a3ba75618c68e5 | 371 ++++++++++++++++ .../d1/50a093b2d12e001511a3ba75618c68e5 | 328 +++++++++++++++ .../d1/706be4b5f12e001511a3ba75618c68e5 | 373 ++++++++++++++++ .../d2/a0f5e567cf2e001511a3ba75618c68e5 | 93 ++++ .../d2/e0d75c1cf52e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../d3/606f612ef92e001511a3ba75618c68e5 | 389 +++++++++++++++++ .../d4/a06157d2d22e001511a3ba75618c68e5 | 101 +++++ .../d5/b0f64d23d22e001511a3ba75618c68e5 | 335 +++++++++++++++ .../d7/60dd2311f02e001511a3ba75618c68e5 | 351 +++++++++++++++ .../d9/a0effc8dcf2e001511a3ba75618c68e5 | 94 +++++ .../da/3015c517d22e001511a3ba75618c68e5 | 334 +++++++++++++++ .../da/60d0a320f52e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../da/a0ee8a65cf2e001511a3ba75618c68e5 | 92 ++++ .../da/b01aba10d22e001511a3ba75618c68e5 | 98 +++++ .../da/e028ee36ee2e001511a3ba75618c68e5 | 338 +++++++++++++++ .../db/60525316f62e001511a3ba75618c68e5 | 383 +++++++++++++++++ .../db/e0beb2d9fa2e001511a3ba75618c68e5 | 397 +++++++++++++++++ .../dc/20e486bcc52e001511a3ba75618c68e5 | 305 ++++++++++++++ .../dc/d0bfbbf2bf2e001511a3ba75618c68e5 | 291 +++++++++++++ .../dd/200daaf7c52e001511a3ba75618c68e5 | 315 ++++++++++++++ .../dd/20e88117c62e001511a3ba75618c68e5 | 312 ++++++++++++++ .../dd/a0d6be9fc42e001511a3ba75618c68e5 | 294 +++++++++++++ .../dd/e083e020f82e001511a3ba75618c68e5 | 111 +++++ .../df/300c6d49c02e001511a3ba75618c68e5 | 292 +++++++++++++ .../df/40c1de71cf2e001511a3ba75618c68e5 | 94 +++++ .../e/20950642c92e001511a3ba75618c68e5 | 333 +++++++++++++++ .../e1/e0d02fe9ed2e001511a3ba75618c68e5 | 336 +++++++++++++++ .../e2/30cf0cc0c82e001511a3ba75618c68e5 | 325 ++++++++++++++ .../e2/e09936ccef2e001511a3ba75618c68e5 | 347 +++++++++++++++ .../e3/a0978eb0c82e001511a3ba75618c68e5 | 324 ++++++++++++++ .../e5/607d36ccf02e001511a3ba75618c68e5 | 355 ++++++++++++++++ .../e5/e039cfb8f22e001511a3ba75618c68e5 | 381 +++++++++++++++++ .../e6/e09fc270f02e001511a3ba75618c68e5 | 353 ++++++++++++++++ .../ea/a085533dcf2e001511a3ba75618c68e5 | 85 ++++ .../ec/30fe1899d22e001511a3ba75618c68e5 | 100 +++++ .../ed/e0feb053f22e001511a3ba75618c68e5 | 378 +++++++++++++++++ .../ed/f09acb29f62e001511a3ba75618c68e5 | 383 +++++++++++++++++ .../f/30dc59d9c82e001511a3ba75618c68e5 | 326 ++++++++++++++ .../f/4081c9edc12e001511a3ba75618c68e5 | 294 +++++++++++++ .../f0/30004907d32e001511a3ba75618c68e5 | 107 +++++ .../f0/904f621cc82e001511a3ba75618c68e5 | 323 ++++++++++++++ .../f0/e006e534f82e001511a3ba75618c68e5 | 112 +++++ .../f2/e0fcf2d8f02e001511a3ba75618c68e5 | 356 ++++++++++++++++ .../f4/00874f9ef72e001511a3ba75618c68e5 | 385 +++++++++++++++++ .../f4/100cd858cf2e001511a3ba75618c68e5 | 92 ++++ .../f5/606e09ccfa2e001511a3ba75618c68e5 | 393 +++++++++++++++++ .../f6/a065bef2c42e001511a3ba75618c68e5 | 307 ++++++++++++++ .../f7/30fdd3fbc42e001511a3ba75618c68e5 | 307 ++++++++++++++ .../f8/e0c1b81ef82e001511a3ba75618c68e5 | 110 +++++ .../f9/6022dfe8f92e001511a3ba75618c68e5 | 391 +++++++++++++++++ .../fa/201779a3d22e001511a3ba75618c68e5 | 101 +++++ .../fa/60103664f82e001511a3ba75618c68e5 | 116 +++++ .../fb/6086a867ee2e001511a3ba75618c68e5 | 338 +++++++++++++++ .../fb/806b4e4ac02e001511a3ba75618c68e5 | 292 +++++++++++++ .../fb/b0ab4825c62e001511a3ba75618c68e5 | 313 ++++++++++++++ .../fc/3086b133c72e001511a3ba75618c68e5 | 314 ++++++++++++++ .../fd/80dba9e9f02e001511a3ba75618c68e5 | 360 ++++++++++++++++ .../fe/50283165ef2e001511a3ba75618c68e5 | 343 +++++++++++++++ .../fe/e0151cd4ef2e001511a3ba75618c68e5 | 347 +++++++++++++++ .../ff/f0d7250df42e001511a3ba75618c68e5 | 382 +++++++++++++++++ .../RemoteSystemsTempFiles/.markers.snap | Bin 0 -> 560 bytes .../RemoteSystemsTempFiles/.syncinfo.snap | Bin 0 -> 560 bytes .../.indexes/e4/77/69/e/history.index | Bin 4559 -> 7535 bytes .../TheButtonAutoFlair/.markers.snap | Bin 0 -> 28724 bytes .../TheButtonAutoFlair/.syncinfo.snap | Bin 0 -> 560 bytes .../.root/.markers.snap | Bin 0 -> 560 bytes .../.safetable/org.eclipse.core.resources | Bin 1762 -> 28747 bytes .../.plugins/org.eclipse.core.resources/.snap | Bin 0 -> 23598 bytes .../.settings/org.eclipse.jst.jsp.core.prefs | 2 +- .../org.eclipse.jdt.core/1508644233.index | Bin 14511 -> 15141 bytes .../org.eclipse.jdt.core/1934142626.index | Bin 0 -> 221358 bytes .../org.eclipse.jdt.core/3089967703.index | Bin 0 -> 233782 bytes .../org.eclipse.jdt.core/866502542.index | Bin 0 -> 5924 bytes .../externalLibsTimeStamps | Bin 1431 -> 1593 bytes .../org.eclipse.jdt.core/savedIndexNames.txt | 40 +- .../org.eclipse.jdt.ui/jdt-images/0.png | Bin 0 -> 210 bytes .../org.eclipse.jdt.ui/jdt-images/1.png | Bin 0 -> 490 bytes .../org.eclipse.jdt.ui/jdt-images/2.png | Bin 0 -> 436 bytes .../org.eclipse.jdt.ui/jdt-images/3.png | Bin 0 -> 194 bytes .../org.eclipse.jdt.ui/jdt-images/4.png | Bin 0 -> 283 bytes .../org.eclipse.jdt.ui/jdt-images/5.png | Bin 0 -> 277 bytes .../org.eclipse.jdt.ui/jdt-images/6.png | Bin 0 -> 238 bytes .../org.eclipse.jdt.ui/jdt-images/7.png | Bin 0 -> 509 bytes .../org.eclipse.team.cvs.core/.running | 0 .../org.eclipse.ui.workbench/workingsets.xml | 1 + TheButtonAutoFlair.jar | Bin 55568 -> 57843 bytes TheButtonAutoFlair/.classpath | 3 + .../tk/sznp/thebuttonautoflair/Commands.class | Bin 2591 -> 4203 bytes .../thebuttonautoflair/PluginMain$1.class | Bin 675 -> 675 bytes .../sznp/thebuttonautoflair/PluginMain.class | Bin 10085 -> 12702 bytes .../tk/sznp/thebuttonautoflair/Commands.java | 64 ++- .../sznp/thebuttonautoflair/PluginMain.java | 114 ++++- 382 files changed, 101496 insertions(+), 27 deletions(-) create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/0/4026a562ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1/10092140c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/10/e03d4f54f62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/11/302d82aec52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/11/703abcfff12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/13/604732c5f52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/13/b00ee04cc72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/14/d01b6d05f52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/15/20b3105acf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/15/4032ab5dbf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/15/602ef8eded2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/15/905b71c7ed2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/16/b03d628ac42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/18/2072884bc02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/18/a075b55fc92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/18/e00b6b58ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/18/e024139bf02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/18/e07d8480f52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1a/a09f2e39c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1a/c0cfb22dc02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1b/f0224de8f62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1c/6074bf28f12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1e/10a41e97ee2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1e/504c9d52ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1f/2028de3fcf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1f/b00d77f0c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2/c07312e9bf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/20/a0f94f72cf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/21/6079da59fa2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/21/9091585acf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/22/a0bbe40cc52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/23/40423b2bcf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/23/60878d1afb2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/23/a0089f13c62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/24/205b7a17d32e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/24/60c0f732f92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/24/b0050f65c02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/26/d01f259ef02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/27/7096e0b1f12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2a/20defcdbc72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2a/304ef98cc22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2b/b071b16acf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2c/20ac6667d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2d/20ebe2afc42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2e/204539a2c72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2f/60c08aa1ed2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3/60b156f3ed2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/30/a046033cc92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/32/306725aec52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/32/60416866f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/32/e0bd8a0af82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/33/307f3ebec52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/33/e0e8f0d9c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/34/20530121c82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/34/2066c3cdc82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/35/20ec61bbc52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/35/a0d28e1ac92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/35/d0feddc3f12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/37/400d6ebfbf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/38/30ed4da8d12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/38/609a0a5fef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/39/7076fe6ff92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3a/300567b8d12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3a/f0edd7def02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3c/100230c7c72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3d/2034d8fed22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3d/b0b429e1c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3e/501e53c6c12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3e/d041c107f12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3e/f09f99a6f12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3f/90d2ea4ac02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3f/d0ae2988f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3f/f076feeff32e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4/3024cc05d32e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/40/60fa6e10f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/40/e0ff0e3eef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/41/2061287bcf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/42/e062ef3ef12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/44/60baddbded2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/44/a0066f16c82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/45/e004d2d0f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/46/2068e749c72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/46/206c822bc92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/46/e0388548ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/47/8013b362f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/47/a0a57ff6bf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/48/00ffdb60ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/49/20448ca9d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/49/208701fac42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4a/20621c6bc72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4a/30a94cffc42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4b/705083c4fa2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4b/f0e8f6d8fa2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4c/60dfd6bffa2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4c/b0f836d6c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4d/601ac327ee2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4f/60f90ef1ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4f/e0992796ee2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5/20f29cc9c12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/51/c08e14f8c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/52/e033be44f12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/52/e07bf409f92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/52/e098cc7eee2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/53/2088f35ac62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/53/60a94d43f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/53/e0c3c4b6f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/53/e0e025b8fa2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/54/a08c9aaec42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/55/108abd59cf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/56/600fc5d9ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/58/306a8bbfc82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/58/60ed80d2f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5a/807ce202f92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5b/c04677b1c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5b/e0bdb4c2ed2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5b/e0c3bfdabf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5c/20130c91c92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5c/501d5bcfed2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5d/e022cf5fef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5f/20fb7c76c72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6/30c2f2eec52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/61/60e73961f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/62/b0ef74cace2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/63/70033eb0c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/63/a0335f19c62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/64/f003f832f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/64/f0a40a23fa2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/65/a0018c88c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/67/b0a2021dd22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/69/a0742e97c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/69/a09f55a6d12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6a/a041c51ecf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6a/a0a9b7c0d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6c/20839ed9c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6c/b0c9b7a0d12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6d/20da2322c82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6f/7051f7cef82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6f/e0adbb55f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7/20e4b24fcf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7/30377337c92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7/a0481e0ac52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/74/20c870fec42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/74/30231013d32e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/74/b044220ec52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/76/606cb261f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/76/609ffee6f52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/76/7043c1cded2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/77/207e8f0bc02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/77/6089e238ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/77/70d77550fa2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/78/d07f6c71c12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/79/003d5ea2ed2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/79/e003d641f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7a/606aad24f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7a/80cff965ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7a/e04691cdfa2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7b/402ae40dc52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7b/6014043bf02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7c/201f6405c92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7c/2055c958c62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7c/6026172bf92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7d/202437fbc82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7d/b01607f8c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7e/10cadbb0c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7e/500698dcbf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7e/60a3a83aef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7f/702359e9f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7f/7097cde3b82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8/2023cbe9c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8/60032e9cf32e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8/6022721bf82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8/e0108b91fa2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/80/20e2900fc02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/80/6030fe14fb2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/81/207849dec52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/81/a0d37509c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/81/a0e017eec72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/84/20ae50cfce2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/84/e0cafcb5f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/85/7082ce5ff62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/85/e0142d0af52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/85/e0445a04f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/87/c0ee9e2cc02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/87/e0091494f32e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/89/e09bd143ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8b/b08c1511c82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8b/d0c1d07df02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8b/e0e354c4ee2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8c/60ddc035f72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8d/60bb3fa1f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8d/e0e833fff72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8e/20ff3826c62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8f/205432bcc82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9/a0706393c92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/90/308d0ce3bf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/90/6069aa58f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/90/e0c2706bf72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/91/a005e2c5c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/92/60ec4bcded2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/92/c0e52982cf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/93/b0d3830fc92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/93/b0d47969d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/98/b0f95768c12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/98/e00fcf2df82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/99/603c843af82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/99/a045560ec82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/99/e0cf6ed0f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9a/e0576b12f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9d/60c3c8dcf82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a/80754cfbf72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a/e0a46b3df82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a0/e0c38940ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a1/302a6e59d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a3/70684cbef22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a3/a0b004efd22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a4/605a1b57ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a5/a032f69ec82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a6/30615366ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a7/7048aedcf62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a7/a0feefeac52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a8/20776c1dc92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a9/600d733bf12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a9/f0f38415f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/aa/b0d2228ec52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/aa/e0af633fee2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ab/2091a3e5d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ab/20d4c998cf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ab/60ddb85af82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ab/e0241976f62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ac/209cc836c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ac/e05e031af22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ae/60376ea0ee2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/af/00b3c459f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/af/a0a41840c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/af/e01790d7f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b/50330699ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b1/204e43add12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b2/e02b9ea1ee2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b3/20455670d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b3/b0196cc5c12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b4/a0608155c72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b6/604a1fa6f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b6/609d3f28ee2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b6/e0d9140ff82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b7/a002ab6dcf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b8/108b64cac52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b8/b00f8654d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b9/20a7d70dc52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b9/40c2f665ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ba/d013f5efc12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bb/30c1a2d8c82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bb/600ef5ddf82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bb/b00f19f8d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bb/e0bd71c4f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bc/e06e426ff82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/be/206ef6f9c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bf/30eef93ec52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bf/40b7a880bf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bf/a0c81b95c12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c/206bd40cc92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c/a03dc224c62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c/a0bbdf39cf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c0/2087239bc52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c0/609e9b12f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c0/e0ca4cccf82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c1/402ed649c02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c3/709abd11f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c3/90b90e40c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c4/30128891cf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c4/60544486ed2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c4/e0191ea8ed2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c5/205ef9e6c72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c6/508d4163ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c6/70f7bb04f92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c6/e0f20f06f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c7/3015ce54d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c7/e0524424f92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c7/f0d24c00f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c8/2097812fd22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ca/c067eb62d32e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/cb/e00c8ff2f32e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/cc/10137161ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/cc/306aac51cf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/cc/60cf3d08f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d/a0a4134fd42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d0/20e069c0c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d0/e00161a0f72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d0/e03bfec4f12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d1/50a093b2d12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d1/706be4b5f12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d2/a0f5e567cf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d2/e0d75c1cf52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d3/606f612ef92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d4/a06157d2d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d5/b0f64d23d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d7/60dd2311f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d9/a0effc8dcf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/da/3015c517d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/da/60d0a320f52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/da/a0ee8a65cf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/da/b01aba10d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/da/e028ee36ee2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/db/60525316f62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/db/e0beb2d9fa2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/dc/20e486bcc52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/dc/d0bfbbf2bf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/dd/200daaf7c52e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/dd/20e88117c62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/dd/a0d6be9fc42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/dd/e083e020f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/df/300c6d49c02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/df/40c1de71cf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e/20950642c92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e1/e0d02fe9ed2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e2/30cf0cc0c82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e2/e09936ccef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e3/a0978eb0c82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e5/607d36ccf02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e5/e039cfb8f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e6/e09fc270f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ea/a085533dcf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ec/30fe1899d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ed/e0feb053f22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ed/f09acb29f62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f/30dc59d9c82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f/4081c9edc12e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f0/30004907d32e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f0/904f621cc82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f0/e006e534f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f2/e0fcf2d8f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f4/00874f9ef72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f4/100cd858cf2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f5/606e09ccfa2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f6/a065bef2c42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f7/30fdd3fbc42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f8/e0c1b81ef82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f9/6022dfe8f92e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fa/201779a3d22e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fa/60103664f82e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fb/6086a867ee2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fb/806b4e4ac02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fb/b0ab4825c62e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fc/3086b133c72e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fd/80dba9e9f02e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fe/50283165ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fe/e0151cd4ef2e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ff/f0d7250df42e001511a3ba75618c68e5 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.snap create mode 100644 .metadata/.plugins/org.eclipse.jdt.core/1934142626.index create mode 100644 .metadata/.plugins/org.eclipse.jdt.core/3089967703.index create mode 100644 .metadata/.plugins/org.eclipse.jdt.core/866502542.index create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/0.png create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/1.png create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/2.png create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/3.png create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/4.png create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/6.png create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/7.png create mode 100644 .metadata/.plugins/org.eclipse.team.cvs.core/.running diff --git a/.metadata/.log b/.metadata/.log index 23c593d..e2e6a43 100644 --- a/.metadata/.log +++ b/.metadata/.log @@ -42,3 +42,237 @@ user global configuration and to define the default location to store repositori 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-07-20 10:22:45.311 ----------------------------------------------- +eclipse.buildId=M20130204-1200 +java.version=1.8.0_45 +java.vendor=Oracle Corporation +BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=hu_HU +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-07-20 10:23:24.280 +!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-07-20 10:23:24.288 +!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 4 4 2015-07-20 11:50:38.584 +!MESSAGE Save Failed + +!ENTRY org.eclipse.ui 2 0 2015-07-20 11:50:38.607 +!MESSAGE Save Failed +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: assertion failed: + at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110) + at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96) + at org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel.updateMarkers(AbstractMarkerAnnotationModel.java:550) + at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.commitWorkingCopy(CompilationUnitDocumentProvider.java:1401) + at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$4.execute(CompilationUnitDocumentProvider.java:1449) + at org.eclipse.ui.editors.text.TextFileDocumentProvider$DocumentProviderOperation.run(TextFileDocumentProvider.java:132) + at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) + at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) + at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:75) + at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:65) + at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:456) + at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:772) + at org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:5066) + at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave(CompilationUnitEditor.java:1247) + at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave(CompilationUnitEditor.java:1301) + at org.eclipse.ui.texteditor.AbstractTextEditor$TextEditorSavable.doSave(AbstractTextEditor.java:7198) + at org.eclipse.ui.Saveable.doSave(Saveable.java:214) + at org.eclipse.ui.internal.SaveableHelper.doSaveModel(SaveableHelper.java:346) + at org.eclipse.ui.internal.SaveableHelper$3.run(SaveableHelper.java:193) + at org.eclipse.ui.internal.SaveableHelper$5.run(SaveableHelper.java:274) + at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) + at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) + at org.eclipse.ui.internal.WorkbenchWindow$13.run(WorkbenchWindow.java:1679) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:1676) + at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:282) + at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:261) + at org.eclipse.ui.internal.SaveableHelper.saveModels(SaveableHelper.java:204) + at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:144) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.doSave(CompatibilityPart.java:417) + at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56) + at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:231) + at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:237) + at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:201) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:89) + at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.savePart(PartServiceImpl.java:1223) + at org.eclipse.ui.internal.WorkbenchPage.saveSaveable(WorkbenchPage.java:3437) + at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3455) + at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:76) + at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) + at org.eclipse.jface.commands.ActionHandler.execute(ActionHandler.java:119) + at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:76) + at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56) + at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:231) + at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:212) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:131) + at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:171) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:277) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:496) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:547) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:368) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.access$0(KeyBindingDispatcher.java:314) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:83) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1262) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1100) + at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1521) + at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4640) + at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:345) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4528) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4976) + at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) + at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2546) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3756) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1053) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:942) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) + 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:629) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) + at org.eclipse.equinox.launcher.Main.run(Main.java:1438) + +!ENTRY org.eclipse.ui 4 4 2015-07-20 18:17:08.584 +!MESSAGE Save Failed + +!ENTRY org.eclipse.ui 2 0 2015-07-20 18:17:08.600 +!MESSAGE Save Failed +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: assertion failed: + at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110) + at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96) + at org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel.updateMarkers(AbstractMarkerAnnotationModel.java:550) + at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.commitWorkingCopy(CompilationUnitDocumentProvider.java:1401) + at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$4.execute(CompilationUnitDocumentProvider.java:1449) + at org.eclipse.ui.editors.text.TextFileDocumentProvider$DocumentProviderOperation.run(TextFileDocumentProvider.java:132) + at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) + at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) + at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:75) + at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:65) + at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:456) + at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:772) + at org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:5066) + at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave(CompilationUnitEditor.java:1247) + at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave(CompilationUnitEditor.java:1301) + at org.eclipse.ui.texteditor.AbstractTextEditor$TextEditorSavable.doSave(AbstractTextEditor.java:7198) + at org.eclipse.ui.Saveable.doSave(Saveable.java:214) + at org.eclipse.ui.internal.SaveableHelper.doSaveModel(SaveableHelper.java:346) + at org.eclipse.ui.internal.SaveableHelper$3.run(SaveableHelper.java:193) + at org.eclipse.ui.internal.SaveableHelper$5.run(SaveableHelper.java:274) + at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) + at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) + at org.eclipse.ui.internal.WorkbenchWindow$13.run(WorkbenchWindow.java:1679) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:1676) + at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:282) + at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:261) + at org.eclipse.ui.internal.SaveableHelper.saveModels(SaveableHelper.java:204) + at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:144) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.doSave(CompatibilityPart.java:417) + at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56) + at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:231) + at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:237) + at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:201) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:89) + at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.savePart(PartServiceImpl.java:1223) + at org.eclipse.ui.internal.WorkbenchPage.saveSaveable(WorkbenchPage.java:3437) + at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3455) + at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:76) + at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) + at org.eclipse.jface.commands.ActionHandler.execute(ActionHandler.java:119) + at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:76) + at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56) + at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:231) + at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:212) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:131) + at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:171) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:277) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:496) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:547) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:368) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.access$0(KeyBindingDispatcher.java:314) + at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:83) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1262) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1100) + at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1521) + at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4640) + at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:345) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4528) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4976) + at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) + at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2546) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3756) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1053) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:942) + at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) + 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:629) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) + at org.eclipse.equinox.launcher.Main.run(Main.java:1438) diff --git a/.metadata/.mylyn/.tasks.xml.zip b/.metadata/.mylyn/.tasks.xml.zip index 67d7fa6a367bcf9ebb38a1bfcd44b951d563ad66..34d8b0ee719c72160fbcc105666285300c2ffb14 100644 GIT binary patch delta 28 hcmeyx_=}M@z?+#xgn@&DgTc1<%S7Il%phu~BLH%P2_pai delta 28 hcmeyx_=}M@z?+#xgn@&DgP|z 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + else + flair = "non-presser"; + String flairclass; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1/10092140c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/1/10092140c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..d656c74 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1/10092140c52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String[] line=br.readLine().split(" "); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/10/e03d4f54f62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/10/e03d4f54f62e001511a3ba75618c68e5 new file mode 100644 index 0000000..d7a829b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/10/e03d4f54f62e001511a3ba75618c68e5 @@ -0,0 +1,383 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/11/302d82aec52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/11/302d82aec52e001511a3ba75618c68e5 new file mode 100644 index 0000000..5a80116 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/11/302d82aec52e001511a3ba75618c68e5 @@ -0,0 +1,312 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + PlayerTowns.put(s[0], s[1]) + } + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/11/703abcfff12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/11/703abcfff12e001511a3ba75618c68e5 new file mode 100644 index 0000000..c747271 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/11/703abcfff12e001511a3ba75618c68e5 @@ -0,0 +1,371 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/13/604732c5f52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/13/604732c5f52e001511a3ba75618c68e5 new file mode 100644 index 0000000..77fab60 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/13/604732c5f52e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/13/b00ee04cc72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/13/b00ee04cc72e001511a3ba75618c68e5 new file mode 100644 index 0000000..3db0df2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/13/b00ee04cc72e001511a3ba75618c68e5 @@ -0,0 +1,319 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String name) + { + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/14/d01b6d05f52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/14/d01b6d05f52e001511a3ba75618c68e5 new file mode 100644 index 0000000..632b739 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/14/d01b6d05f52e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/15/20b3105acf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/15/20b3105acf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..771250c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/15/20b3105acf2e001511a3ba75618c68e5 @@ -0,0 +1,92 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + if(player.isOp()) + { + try + { + File 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(" "); + PluginMain.TownColors.put(s[0], s[1]); + } + br.close(); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/15/4032ab5dbf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/15/4032ab5dbf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..3e34365 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/15/4032ab5dbf2e001511a3ba75618c68e5 @@ -0,0 +1,64 @@ +package tk.sznp.thebuttonautoflair; + +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + + player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + } + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/15/602ef8eded2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/15/602ef8eded2e001511a3ba75618c68e5 new file mode 100644 index 0000000..73ed72d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/15/602ef8eded2e001511a3ba75618c68e5 @@ -0,0 +1,337 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/15/905b71c7ed2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/15/905b71c7ed2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e0c4ba7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/15/905b71c7ed2e001511a3ba75618c68e5 @@ -0,0 +1,336 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/16/b03d628ac42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/16/b03d628ac42e001511a3ba75618c68e5 new file mode 100644 index 0000000..26cb915 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/16/b03d628ac42e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/18/2072884bc02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/18/2072884bc02e001511a3ba75618c68e5 new file mode 100644 index 0000000..27b8fb2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/18/2072884bc02e001511a3ba75618c68e5 @@ -0,0 +1,292 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/18/a075b55fc92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/18/a075b55fc92e001511a3ba75618c68e5 new file mode 100644 index 0000000..5aaf0eb --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/18/a075b55fc92e001511a3ba75618c68e5 @@ -0,0 +1,333 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (NotRegisteredException e) { + return ""; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/18/e00b6b58ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/18/e00b6b58ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..1191621 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/18/e00b6b58ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/18/e024139bf02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/18/e024139bf02e001511a3ba75618c68e5 new file mode 100644 index 0000000..fcb3b5d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/18/e024139bf02e001511a3ba75618c68e5 @@ -0,0 +1,354 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/18/e07d8480f52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/18/e07d8480f52e001511a3ba75618c68e5 new file mode 100644 index 0000000..6563824 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/18/e07d8480f52e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1a/a09f2e39c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/1a/a09f2e39c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..733faf0 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1a/a09f2e39c52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line=br.readLine(); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c0cfb22dc02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c0cfb22dc02e001511a3ba75618c68e5 new file mode 100644 index 0000000..c6a0024 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c0cfb22dc02e001511a3ba75618c68e5 @@ -0,0 +1,292 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //player.setDisplayName(player.getDisplayName()+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1b/f0224de8f62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/1b/f0224de8f62e001511a3ba75618c68e5 new file mode 100644 index 0000000..90475e6 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1b/f0224de8f62e001511a3ba75618c68e5 @@ -0,0 +1,384 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1c/6074bf28f12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/1c/6074bf28f12e001511a3ba75618c68e5 new file mode 100644 index 0000000..c0911e7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1c/6074bf28f12e001511a3ba75618c68e5 @@ -0,0 +1,361 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/10a41e97ee2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/10a41e97ee2e001511a3ba75618c68e5 new file mode 100644 index 0000000..7afefee --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/10a41e97ee2e001511a3ba75618c68e5 @@ -0,0 +1,341 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + int x=0> + while((x=displayname.indexOf("§", x))) + Positions.add(x) + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/504c9d52ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/504c9d52ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..40a3922 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/504c9d52ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=displayname.length()-1; i>=0; i--) { + if(Character.isUpperCase(str.charAt(i))) { + return i; + } + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1f/2028de3fcf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/1f/2028de3fcf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..86b0fad --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1f/2028de3fcf2e001511a3ba75618c68e5 @@ -0,0 +1,85 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + if(player.isOp()) + { + 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(" "); + PluginMain.TownColors.put(s[0], s[1]); + } + br.close(); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1f/b00d77f0c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/1f/b00d77f0c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..ca48d16 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1f/b00d77f0c42e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2/c07312e9bf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/2/c07312e9bf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..809f9c9 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2/c07312e9bf2e001511a3ba75618c68e5 @@ -0,0 +1,291 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + player.setDisplayName(player.getDisplayName()+flair); + else + player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); + } + + public static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/20/a0f94f72cf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/20/a0f94f72cf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..bbe6918 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/20/a0f94f72cf2e001511a3ba75618c68e5 @@ -0,0 +1,94 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + player.sendMessage(") + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/21/6079da59fa2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/21/6079da59fa2e001511a3ba75618c68e5 new file mode 100644 index 0000000..cbdeaa3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/21/6079da59fa2e001511a3ba75618c68e5 @@ -0,0 +1,391 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/21/9091585acf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/21/9091585acf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..771250c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/21/9091585acf2e001511a3ba75618c68e5 @@ -0,0 +1,92 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + if(player.isOp()) + { + try + { + File 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(" "); + PluginMain.TownColors.put(s[0], s[1]); + } + br.close(); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/22/a0bbe40cc52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/22/a0bbe40cc52e001511a3ba75618c68e5 new file mode 100644 index 0000000..fbeb168 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/22/a0bbe40cc52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + br.readLine(); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/23/40423b2bcf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/23/40423b2bcf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..7259f0b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/23/40423b2bcf2e001511a3ba75618c68e5 @@ -0,0 +1,67 @@ +package tk.sznp.thebuttonautoflair; + +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/23/60878d1afb2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/23/60878d1afb2e001511a3ba75618c68e5 new file mode 100644 index 0000000..b85b6bf --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/23/60878d1afb2e001511a3ba75618c68e5 @@ -0,0 +1,397 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + /*System.out.println("Sleeping for 5 seconds..."); //2015.07.20. + try { + Thread.sleep(5000); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } //2015.07.20.*/ + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/23/a0089f13c62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/23/a0089f13c62e001511a3ba75618c68e5 new file mode 100644 index 0000000..527c743 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/23/a0089f13c62e001511a3ba75618c68e5 @@ -0,0 +1,312 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/24/205b7a17d32e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/24/205b7a17d32e001511a3ba75618c68e5 new file mode 100644 index 0000000..3c67f45 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/24/205b7a17d32e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color), dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/24/60c0f732f92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/24/60c0f732f92e001511a3ba75618c68e5 new file mode 100644 index 0000000..12740b3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/24/60c0f732f92e001511a3ba75618c68e5 @@ -0,0 +1,389 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/24/b0050f65c02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/24/b0050f65c02e001511a3ba75618c68e5 new file mode 100644 index 0000000..27b8fb2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/24/b0050f65c02e001511a3ba75618c68e5 @@ -0,0 +1,292 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/26/d01f259ef02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/26/d01f259ef02e001511a3ba75618c68e5 new file mode 100644 index 0000000..e57ddce --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/26/d01f259ef02e001511a3ba75618c68e5 @@ -0,0 +1,355 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/27/7096e0b1f12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/27/7096e0b1f12e001511a3ba75618c68e5 new file mode 100644 index 0000000..4da7656 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/27/7096e0b1f12e001511a3ba75618c68e5 @@ -0,0 +1,370 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2a/20defcdbc72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/2a/20defcdbc72e001511a3ba75618c68e5 new file mode 100644 index 0000000..a330c1e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2a/20defcdbc72e001511a3ba75618c68e5 @@ -0,0 +1,322 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + Towny.getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2a/304ef98cc22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/2a/304ef98cc22e001511a3ba75618c68e5 new file mode 100644 index 0000000..26cb915 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2a/304ef98cc22e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2b/b071b16acf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/2b/b071b16acf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..6d662be --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2b/b071b16acf2e001511a3ba75618c68e5 @@ -0,0 +1,93 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2c/20ac6667d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/2c/20ac6667d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..e8fbbda --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2c/20ac6667d22e001511a3ba75618c68e5 @@ -0,0 +1,99 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2d/20ebe2afc42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/2d/20ebe2afc42e001511a3ba75618c68e5 new file mode 100644 index 0000000..5eb70f1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2d/20ebe2afc42e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2e/204539a2c72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/2e/204539a2c72e001511a3ba75618c68e5 new file mode 100644 index 0000000..86fec34 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2e/204539a2c72e001511a3ba75618c68e5 @@ -0,0 +1,321 @@ +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.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.Towny; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2f/60c08aa1ed2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/2f/60c08aa1ed2e001511a3ba75618c68e5 new file mode 100644 index 0000000..9308b28 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2f/60c08aa1ed2e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3/60b156f3ed2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3/60b156f3ed2e001511a3ba75618c68e5 new file mode 100644 index 0000000..70fcc26 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3/60b156f3ed2e001511a3ba75618c68e5 @@ -0,0 +1,337 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/30/a046033cc92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/30/a046033cc92e001511a3ba75618c68e5 new file mode 100644 index 0000000..db98a41 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/30/a046033cc92e001511a3ba75618c68e5 @@ -0,0 +1,332 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(Player player) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + } catch (NotRegisteredException e) { + return ""; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/32/306725aec52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/32/306725aec52e001511a3ba75618c68e5 new file mode 100644 index 0000000..925a0ad --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/32/306725aec52e001511a3ba75618c68e5 @@ -0,0 +1,311 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + } + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/32/60416866f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/32/60416866f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..531359c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/32/60416866f22e001511a3ba75618c68e5 @@ -0,0 +1,378 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/32/e0bd8a0af82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/32/e0bd8a0af82e001511a3ba75618c68e5 new file mode 100644 index 0000000..af92130 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/32/e0bd8a0af82e001511a3ba75618c68e5 @@ -0,0 +1,108 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } + private static void DoReload() +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/33/307f3ebec52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/33/307f3ebec52e001511a3ba75618c68e5 new file mode 100644 index 0000000..88f4fdc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/33/307f3ebec52e001511a3ba75618c68e5 @@ -0,0 +1,312 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/33/e0e8f0d9c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/33/e0e8f0d9c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..eaca8b5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/33/e0e8f0d9c42e001511a3ba75618c68e5 @@ -0,0 +1,299 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/34/20530121c82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/34/20530121c82e001511a3ba75618c68e5 new file mode 100644 index 0000000..04da5b0 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/34/20530121c82e001511a3ba75618c68e5 @@ -0,0 +1,323 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + new Class(1, 2); + getPlugin()).getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/34/2066c3cdc82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/34/2066c3cdc82e001511a3ba75618c68e5 new file mode 100644 index 0000000..7f3bbf4 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/34/2066c3cdc82e001511a3ba75618c68e5 @@ -0,0 +1,326 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + List towns = TownyUniverse.getDataSource().getTowns(); + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/35/20ec61bbc52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/35/20ec61bbc52e001511a3ba75618c68e5 new file mode 100644 index 0000000..88f4fdc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/35/20ec61bbc52e001511a3ba75618c68e5 @@ -0,0 +1,312 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/35/a0d28e1ac92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/35/a0d28e1ac92e001511a3ba75618c68e5 new file mode 100644 index 0000000..5533282 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/35/a0d28e1ac92e001511a3ba75618c68e5 @@ -0,0 +1,327 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(Player player) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/35/d0feddc3f12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/35/d0feddc3f12e001511a3ba75618c68e5 new file mode 100644 index 0000000..59cc8af --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/35/d0feddc3f12e001511a3ba75618c68e5 @@ -0,0 +1,373 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + { + System.out.println() + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/37/400d6ebfbf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/37/400d6ebfbf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..2715e75 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/37/400d6ebfbf2e001511a3ba75618c68e5 @@ -0,0 +1,287 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + player.setDisplayName(player.getDisplayName()+flair); + else + player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/38/30ed4da8d12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/38/30ed4da8d12e001511a3ba75618c68e5 new file mode 100644 index 0000000..6cc0638 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/38/30ed4da8d12e001511a3ba75618c68e5 @@ -0,0 +1,98 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); + 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. + if(player.isOp()) + { + 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(); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/38/609a0a5fef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/38/609a0a5fef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..61344f8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/38/609a0a5fef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/39/7076fe6ff92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/39/7076fe6ff92e001511a3ba75618c68e5 new file mode 100644 index 0000000..98fe805 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/39/7076fe6ff92e001511a3ba75618c68e5 @@ -0,0 +1,389 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3a/300567b8d12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3a/300567b8d12e001511a3ba75618c68e5 new file mode 100644 index 0000000..3b04630 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3a/300567b8d12e001511a3ba75618c68e5 @@ -0,0 +1,334 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3a/f0edd7def02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3a/f0edd7def02e001511a3ba75618c68e5 new file mode 100644 index 0000000..4c78085 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3a/f0edd7def02e001511a3ba75618c68e5 @@ -0,0 +1,360 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3c/100230c7c72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3c/100230c7c72e001511a3ba75618c68e5 new file mode 100644 index 0000000..1153508 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3c/100230c7c72e001511a3ba75618c68e5 @@ -0,0 +1,322 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + Towny + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3d/2034d8fed22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3d/2034d8fed22e001511a3ba75618c68e5 new file mode 100644 index 0000000..9964f07 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3d/2034d8fed22e001511a3ba75618c68e5 @@ -0,0 +1,105 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + PluginMain.AppendPlayerDisplayFlairFinal(p, PluginMain.PlayerFlairs.get(p.getName())); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3d/b0b429e1c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3d/b0b429e1c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..c61e3d0 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3d/b0b429e1c52e001511a3ba75618c68e5 @@ -0,0 +1,312 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + File file=new File("autoflairconfig.txt"); + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + try { + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3e/501e53c6c12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3e/501e53c6c12e001511a3ba75618c68e5 new file mode 100644 index 0000000..99bad29 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3e/501e53c6c12e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3e/d041c107f12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3e/d041c107f12e001511a3ba75618c68e5 new file mode 100644 index 0000000..f7c314c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3e/d041c107f12e001511a3ba75618c68e5 @@ -0,0 +1,361 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3e/f09f99a6f12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3e/f09f99a6f12e001511a3ba75618c68e5 new file mode 100644 index 0000000..44ffb2e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3e/f09f99a6f12e001511a3ba75618c68e5 @@ -0,0 +1,369 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3f/90d2ea4ac02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/90d2ea4ac02e001511a3ba75618c68e5 new file mode 100644 index 0000000..27b8fb2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/90d2ea4ac02e001511a3ba75618c68e5 @@ -0,0 +1,292 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3f/d0ae2988f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/d0ae2988f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..97ace2e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/d0ae2988f02e001511a3ba75618c68e5 @@ -0,0 +1,354 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3f/f076feeff32e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/f076feeff32e001511a3ba75618c68e5 new file mode 100644 index 0000000..a29ee53 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/f076feeff32e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4/3024cc05d32e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/4/3024cc05d32e001511a3ba75618c68e5 new file mode 100644 index 0000000..acb2c43 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4/3024cc05d32e001511a3ba75618c68e5 @@ -0,0 +1,106 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + PluginMain.RemovePlayerDisplayFlairFinal(p, flair) + PluginMain.AppendPlayerDisplayFlairFinal(p, PluginMain.PlayerFlairs.get(p.getName())); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/40/60fa6e10f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/40/60fa6e10f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..040ad3c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/40/60fa6e10f22e001511a3ba75618c68e5 @@ -0,0 +1,374 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/40/e0ff0e3eef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/40/e0ff0e3eef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..9791b18 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/40/e0ff0e3eef2e001511a3ba75618c68e5 @@ -0,0 +1,342 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>();for(int i=str.length()-1; i>=0; i--) { + if(Character.isUpperCase(str.charAt(i))) { + return i; + } + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/41/2061287bcf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/41/2061287bcf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..819aa05 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/41/2061287bcf2e001511a3ba75618c68e5 @@ -0,0 +1,94 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + player.sendMessage("") + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/42/e062ef3ef12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/42/e062ef3ef12e001511a3ba75618c68e5 new file mode 100644 index 0000000..35b1ef4 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/42/e062ef3ef12e001511a3ba75618c68e5 @@ -0,0 +1,368 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/44/60baddbded2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/44/60baddbded2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e85bce7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/44/60baddbded2e001511a3ba75618c68e5 @@ -0,0 +1,336 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + color.split("§"); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/44/a0066f16c82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/44/a0066f16c82e001511a3ba75618c68e5 new file mode 100644 index 0000000..0b7f624 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/44/a0066f16c82e001511a3ba75618c68e5 @@ -0,0 +1,323 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + new Class(); + getPlugin()).getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/45/e004d2d0f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/45/e004d2d0f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..5d41449 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/45/e004d2d0f82e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/46/2068e749c72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/46/2068e749c72e001511a3ba75618c68e5 new file mode 100644 index 0000000..0b5a48a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/46/2068e749c72e001511a3ba75618c68e5 @@ -0,0 +1,314 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/46/206c822bc92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/46/206c822bc92e001511a3ba75618c68e5 new file mode 100644 index 0000000..da014e9 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/46/206c822bc92e001511a3ba75618c68e5 @@ -0,0 +1,332 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(Player player) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + } catch (NotRegisteredException e) { + e.printStackTrace(); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/46/e0388548ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/46/e0388548ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..af6ce5a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/46/e0388548ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=str.length()-1; i>=0; i--) { + if(Character.isUpperCase(str.charAt(i))) { + return i; + } + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/47/8013b362f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/47/8013b362f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..74f40d7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/47/8013b362f02e001511a3ba75618c68e5 @@ -0,0 +1,353 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/47/a0a57ff6bf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/47/a0a57ff6bf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..a5a14a8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/47/a0a57ff6bf2e001511a3ba75618c68e5 @@ -0,0 +1,292 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + AppendPlayerDisplayFlairFinal(player, flair); + 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. + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/48/00ffdb60ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/48/00ffdb60ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e75cd9b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/48/00ffdb60ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/49/20448ca9d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/49/20448ca9d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..2ae1ffe --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/49/20448ca9d22e001511a3ba75618c68e5 @@ -0,0 +1,101 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + PluginMain.PlayerFlairs + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/49/208701fac42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/49/208701fac42e001511a3ba75618c68e5 new file mode 100644 index 0000000..436f9cd --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/49/208701fac42e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedReader bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4a/20621c6bc72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/4a/20621c6bc72e001511a3ba75618c68e5 new file mode 100644 index 0000000..1698679 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4a/20621c6bc72e001511a3ba75618c68e5 @@ -0,0 +1,319 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4a/30a94cffc42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/4a/30a94cffc42e001511a3ba75618c68e5 new file mode 100644 index 0000000..b2818dd --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4a/30a94cffc42e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedReader bw=new BufferedReader(new FileReader(file); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4b/705083c4fa2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/4b/705083c4fa2e001511a3ba75618c68e5 new file mode 100644 index 0000000..76ca3b9 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4b/705083c4fa2e001511a3ba75618c68e5 @@ -0,0 +1,393 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + System.out.println("Sleeping for 5 seconds..."); + Thread.currentThread().sleep(5000); + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4b/f0e8f6d8fa2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/4b/f0e8f6d8fa2e001511a3ba75618c68e5 new file mode 100644 index 0000000..2a3f96f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4b/f0e8f6d8fa2e001511a3ba75618c68e5 @@ -0,0 +1,397 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + System.out.println("Sleeping for 5 seconds..."); //2015.07.20. + try { + Thread.currentThread().sleep(5000); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } //2015.07.20. + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4c/60dfd6bffa2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/4c/60dfd6bffa2e001511a3ba75618c68e5 new file mode 100644 index 0000000..bd869fe --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4c/60dfd6bffa2e001511a3ba75618c68e5 @@ -0,0 +1,392 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + Thread.currentThread().sleep(5000); + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4c/b0f836d6c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/4c/b0f836d6c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..ca9c279 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4c/b0f836d6c52e001511a3ba75618c68e5 @@ -0,0 +1,312 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4d/601ac327ee2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/4d/601ac327ee2e001511a3ba75618c68e5 new file mode 100644 index 0000000..4c2dd15 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4d/601ac327ee2e001511a3ba75618c68e5 @@ -0,0 +1,338 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4f/60f90ef1ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/4f/60f90ef1ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e736b23 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4f/60f90ef1ef2e001511a3ba75618c68e5 @@ -0,0 +1,348 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4f/e0992796ee2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/4f/e0992796ee2e001511a3ba75618c68e5 new file mode 100644 index 0000000..3e7496c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4f/e0992796ee2e001511a3ba75618c68e5 @@ -0,0 +1,340 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + int x; + Positions.add(x) + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5/20f29cc9c12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/5/20f29cc9c12e001511a3ba75618c68e5 new file mode 100644 index 0000000..99bad29 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5/20f29cc9c12e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/51/c08e14f8c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/51/c08e14f8c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..1747200 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/51/c08e14f8c52e001511a3ba75618c68e5 @@ -0,0 +1,311 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/52/e033be44f12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/52/e033be44f12e001511a3ba75618c68e5 new file mode 100644 index 0000000..3786f45 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/52/e033be44f12e001511a3ba75618c68e5 @@ -0,0 +1,368 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/52/e07bf409f92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/52/e07bf409f92e001511a3ba75618c68e5 new file mode 100644 index 0000000..2f2755c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/52/e07bf409f92e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/52/e098cc7eee2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/52/e098cc7eee2e001511a3ba75618c68e5 new file mode 100644 index 0000000..6c85bd0 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/52/e098cc7eee2e001511a3ba75618c68e5 @@ -0,0 +1,338 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/53/2088f35ac62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/53/2088f35ac62e001511a3ba75618c68e5 new file mode 100644 index 0000000..6ba35d2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/53/2088f35ac62e001511a3ba75618c68e5 @@ -0,0 +1,314 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/53/60a94d43f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/53/60a94d43f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..eada3e3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/53/60a94d43f02e001511a3ba75618c68e5 @@ -0,0 +1,352 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int pos : Positions) + { + + } + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/53/e0c3c4b6f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/53/e0c3c4b6f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..f56e706 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/53/e0c3c4b6f22e001511a3ba75618c68e5 @@ -0,0 +1,378 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/53/e0e025b8fa2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/53/e0e025b8fa2e001511a3ba75618c68e5 new file mode 100644 index 0000000..4ce38cd --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/53/e0e025b8fa2e001511a3ba75618c68e5 @@ -0,0 +1,391 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/54/a08c9aaec42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/54/a08c9aaec42e001511a3ba75618c68e5 new file mode 100644 index 0000000..33f4ba4 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/54/a08c9aaec42e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/55/108abd59cf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/55/108abd59cf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..771250c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/55/108abd59cf2e001511a3ba75618c68e5 @@ -0,0 +1,92 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + if(player.isOp()) + { + try + { + File 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(" "); + PluginMain.TownColors.put(s[0], s[1]); + } + br.close(); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/56/600fc5d9ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/56/600fc5d9ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..cbee395 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/56/600fc5d9ef2e001511a3ba75618c68e5 @@ -0,0 +1,347 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/58/306a8bbfc82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/58/306a8bbfc82e001511a3ba75618c68e5 new file mode 100644 index 0000000..c7bce3d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/58/306a8bbfc82e001511a3ba75618c68e5 @@ -0,0 +1,326 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + List towns = TownyUniverse.getDataSource().getTowns(); + getPlugin()).getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/58/60ed80d2f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/58/60ed80d2f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..0f71b25 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/58/60ed80d2f82e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5a/807ce202f92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/5a/807ce202f92e001511a3ba75618c68e5 new file mode 100644 index 0000000..48bef66 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5a/807ce202f92e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5b/c04677b1c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/c04677b1c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..5eb70f1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/c04677b1c42e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0bdb4c2ed2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0bdb4c2ed2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e85bce7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0bdb4c2ed2e001511a3ba75618c68e5 @@ -0,0 +1,336 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + color.split("§"); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0c3bfdabf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0c3bfdabf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..dab2673 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0c3bfdabf2e001511a3ba75618c68e5 @@ -0,0 +1,288 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + player.setDisplayName(player.getDisplayName()+flair); + else + player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); + } + + public +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5c/20130c91c92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/5c/20130c91c92e001511a3ba75618c68e5 new file mode 100644 index 0000000..5aaf0eb --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5c/20130c91c92e001511a3ba75618c68e5 @@ -0,0 +1,333 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (NotRegisteredException e) { + return ""; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5c/501d5bcfed2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/5c/501d5bcfed2e001511a3ba75618c68e5 new file mode 100644 index 0000000..9308b28 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5c/501d5bcfed2e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5d/e022cf5fef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/5d/e022cf5fef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e75cd9b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5d/e022cf5fef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5f/20fb7c76c72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/5f/20fb7c76c72e001511a3ba75618c68e5 new file mode 100644 index 0000000..0f733ce --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5f/20fb7c76c72e001511a3ba75618c68e5 @@ -0,0 +1,321 @@ +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.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.Towny; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + Towny.getPlugin(); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6/30c2f2eec52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/6/30c2f2eec52e001511a3ba75618c68e5 new file mode 100644 index 0000000..6d85d43 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6/30c2f2eec52e001511a3ba75618c68e5 @@ -0,0 +1,315 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + try { + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/61/60e73961f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/61/60e73961f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..9aa3be7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/61/60e73961f82e001511a3ba75618c68e5 @@ -0,0 +1,115 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + default: + return false; + } + return true; + } + + if(args[0]=="reload") + DoReload(null); //2015.07.20. + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + if(player==null || player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + if(player!=null) + player.sendMessage("§6Reloaded config file.§r"); + else + System.out.println(msg); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/62/b0ef74cace2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/62/b0ef74cace2e001511a3ba75618c68e5 new file mode 100644 index 0000000..fd35b6b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/62/b0ef74cace2e001511a3ba75618c68e5 @@ -0,0 +1,329 @@ +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.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.exceptions.NotRegisteredException; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (NotRegisteredException e) { + return ""; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/63/70033eb0c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/63/70033eb0c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..5eb70f1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/63/70033eb0c42e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/63/a0335f19c62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/63/a0335f19c62e001511a3ba75618c68e5 new file mode 100644 index 0000000..a36a552 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/63/a0335f19c62e001511a3ba75618c68e5 @@ -0,0 +1,313 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + if() + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/64/f003f832f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/64/f003f832f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..c3e9725 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/64/f003f832f82e001511a3ba75618c68e5 @@ -0,0 +1,112 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + default: + return false; + } + return true; + } + + if(args[0]=="reload") + DoReload(null); + return false; + } + private static void DoReload(Player player) + { + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/64/f0a40a23fa2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/64/f0a40a23fa2e001511a3ba75618c68e5 new file mode 100644 index 0000000..d5c1098 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/64/f0a40a23fa2e001511a3ba75618c68e5 @@ -0,0 +1,391 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/65/a0018c88c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/65/a0018c88c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..d656c74 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/65/a0018c88c52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String[] line=br.readLine().split(" "); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/67/b0a2021dd22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/67/b0a2021dd22e001511a3ba75618c68e5 new file mode 100644 index 0000000..0f1ce1b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/67/b0a2021dd22e001511a3ba75618c68e5 @@ -0,0 +1,334 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/69/a0742e97c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/69/a0742e97c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..26cb915 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/69/a0742e97c42e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/69/a09f55a6d12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/69/a09f55a6d12e001511a3ba75618c68e5 new file mode 100644 index 0000000..9bae755 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/69/a09f55a6d12e001511a3ba75618c68e5 @@ -0,0 +1,98 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + + 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. + if(player.isOp()) + { + 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(); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6a/a041c51ecf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/6a/a041c51ecf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..3cfa3e2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6a/a041c51ecf2e001511a3ba75618c68e5 @@ -0,0 +1,64 @@ +package tk.sznp.thebuttonautoflair; + +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + } + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6a/a0a9b7c0d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/6a/a0a9b7c0d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..0f3bc9d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6a/a0a9b7c0d22e001511a3ba75618c68e5 @@ -0,0 +1,101 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + PluginMain.PlayerFlairs.get(p.getName()) + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/20839ed9c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/20839ed9c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..eaca8b5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/20839ed9c42e001511a3ba75618c68e5 @@ -0,0 +1,299 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/b0c9b7a0d12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/b0c9b7a0d12e001511a3ba75618c68e5 new file mode 100644 index 0000000..2430204 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/b0c9b7a0d12e001511a3ba75618c68e5 @@ -0,0 +1,97 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6d/20da2322c82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/6d/20da2322c82e001511a3ba75618c68e5 new file mode 100644 index 0000000..a2d13aa --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6d/20da2322c82e001511a3ba75618c68e5 @@ -0,0 +1,323 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + new Class(1); + getPlugin()).getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6f/7051f7cef82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/6f/7051f7cef82e001511a3ba75618c68e5 new file mode 100644 index 0000000..72effcc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6f/7051f7cef82e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6f/e0adbb55f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/6f/e0adbb55f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..eada3e3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6f/e0adbb55f02e001511a3ba75618c68e5 @@ -0,0 +1,352 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int pos : Positions) + { + + } + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7/20e4b24fcf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7/20e4b24fcf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..fae6f98 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7/20e4b24fcf2e001511a3ba75618c68e5 @@ -0,0 +1,85 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + if(player.isOp()) + { + File 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(" "); + PluginMain.TownColors.put(s[0], s[1]); + } + br.close(); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7/30377337c92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7/30377337c92e001511a3ba75618c68e5 new file mode 100644 index 0000000..1f98b63 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7/30377337c92e001511a3ba75618c68e5 @@ -0,0 +1,332 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(Player player) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + } catch (NotRegisteredException e) { + return ""; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7/a0481e0ac52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7/a0481e0ac52e001511a3ba75618c68e5 new file mode 100644 index 0000000..fbeb168 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7/a0481e0ac52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + br.readLine(); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/74/20c870fec42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/74/20c870fec42e001511a3ba75618c68e5 new file mode 100644 index 0000000..2382e2c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/74/20c870fec42e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedReader bw=new BufferedReader(new FileReader(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/74/30231013d32e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/74/30231013d32e001511a3ba75618c68e5 new file mode 100644 index 0000000..ca7e83d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/74/30231013d32e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(flair), dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/74/b044220ec52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/74/b044220ec52e001511a3ba75618c68e5 new file mode 100644 index 0000000..8e2d176 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/74/b044220ec52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line=br.readLine(); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/76/606cb261f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/76/606cb261f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..62811da --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/76/606cb261f02e001511a3ba75618c68e5 @@ -0,0 +1,353 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/76/609ffee6f52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/76/609ffee6f52e001511a3ba75618c68e5 new file mode 100644 index 0000000..0907c87 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/76/609ffee6f52e001511a3ba75618c68e5 @@ -0,0 +1,383 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/76/7043c1cded2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/76/7043c1cded2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e0c4ba7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/76/7043c1cded2e001511a3ba75618c68e5 @@ -0,0 +1,336 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/77/207e8f0bc02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/77/207e8f0bc02e001511a3ba75618c68e5 new file mode 100644 index 0000000..af8da27 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/77/207e8f0bc02e001511a3ba75618c68e5 @@ -0,0 +1,63 @@ +package tk.sznp.thebuttonautoflair; + +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + } + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/77/6089e238ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/77/6089e238ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..dfd495b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/77/6089e238ef2e001511a3ba75618c68e5 @@ -0,0 +1,341 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + int x=0; + while((x=displayname.indexOf("§", x))!=-1) + Positions.add(x); + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/77/70d77550fa2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/77/70d77550fa2e001511a3ba75618c68e5 new file mode 100644 index 0000000..9f1861e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/77/70d77550fa2e001511a3ba75618c68e5 @@ -0,0 +1,391 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/78/d07f6c71c12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/78/d07f6c71c12e001511a3ba75618c68e5 new file mode 100644 index 0000000..717b2d5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/78/d07f6c71c12e001511a3ba75618c68e5 @@ -0,0 +1,293 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair, String flairclass) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/79/003d5ea2ed2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/79/003d5ea2ed2e001511a3ba75618c68e5 new file mode 100644 index 0000000..9308b28 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/79/003d5ea2ed2e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/79/e003d641f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/79/e003d641f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..1efbd17 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/79/e003d641f82e001511a3ba75618c68e5 @@ -0,0 +1,112 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + default: + return false; + } + return true; + } + + if(args[0]=="reload") + DoReload(null); //2015.07.20. + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7a/606aad24f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7a/606aad24f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..f3f57fc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7a/606aad24f82e001511a3ba75618c68e5 @@ -0,0 +1,111 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } + private static void DoReload(Player player) + { + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7a/80cff965ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7a/80cff965ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e75cd9b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7a/80cff965ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7a/e04691cdfa2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7a/e04691cdfa2e001511a3ba75618c68e5 new file mode 100644 index 0000000..ef2e051 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7a/e04691cdfa2e001511a3ba75618c68e5 @@ -0,0 +1,398 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + System.out.println("Sleeping for 5 seconds..."); //2015.07.20. + try { + Thread.currentThread().sleep(5000); + } catch (InterruptedException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } //2015.07.20. + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7b/402ae40dc52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7b/402ae40dc52e001511a3ba75618c68e5 new file mode 100644 index 0000000..8e2d176 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7b/402ae40dc52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line=br.readLine(); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7b/6014043bf02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7b/6014043bf02e001511a3ba75618c68e5 new file mode 100644 index 0000000..7e4bd99 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7b/6014043bf02e001511a3ba75618c68e5 @@ -0,0 +1,351 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + for(int pos : Positions) + { + + } + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7c/201f6405c92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7c/201f6405c92e001511a3ba75618c68e5 new file mode 100644 index 0000000..806bf88 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7c/201f6405c92e001511a3ba75618c68e5 @@ -0,0 +1,326 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7c/2055c958c62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7c/2055c958c62e001511a3ba75618c68e5 new file mode 100644 index 0000000..e3ae66e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7c/2055c958c62e001511a3ba75618c68e5 @@ -0,0 +1,313 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + if() + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7c/6026172bf92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7c/6026172bf92e001511a3ba75618c68e5 new file mode 100644 index 0000000..06b0607 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7c/6026172bf92e001511a3ba75618c68e5 @@ -0,0 +1,387 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7d/202437fbc82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7d/202437fbc82e001511a3ba75618c68e5 new file mode 100644 index 0000000..b922dfb --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7d/202437fbc82e001511a3ba75618c68e5 @@ -0,0 +1,326 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + TownyUniverse.getDataSource() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7d/b01607f8c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7d/b01607f8c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..5b5a4cf --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7d/b01607f8c42e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7e/10cadbb0c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7e/10cadbb0c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..5eb70f1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7e/10cadbb0c42e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7e/500698dcbf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7e/500698dcbf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..4825715 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7e/500698dcbf2e001511a3ba75618c68e5 @@ -0,0 +1,288 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + player.setDisplayName(player.getDisplayName()+flair); + else + player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); + } + + public static void AppendPlayerDisplayFlairFinal(Player player, String username, String flair); +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7e/60a3a83aef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7e/60a3a83aef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..a9b2226 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7e/60a3a83aef2e001511a3ba75618c68e5 @@ -0,0 +1,344 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>();for(int i=str.length()-1; i>=0; i--) { + if(Character.isUpperCase(str.charAt(i))) { + return i; + } + } + return -1; + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7f/702359e9f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7f/702359e9f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..4c78085 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7f/702359e9f02e001511a3ba75618c68e5 @@ -0,0 +1,360 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7f/7097cde3b82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/7f/7097cde3b82e001511a3ba75618c68e5 new file mode 100644 index 0000000..af8da27 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7f/7097cde3b82e001511a3ba75618c68e5 @@ -0,0 +1,63 @@ +package tk.sznp.thebuttonautoflair; + +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + } + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8/2023cbe9c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8/2023cbe9c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..cbe6671 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8/2023cbe9c42e001511a3ba75618c68e5 @@ -0,0 +1,300 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8/60032e9cf32e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8/60032e9cf32e001511a3ba75618c68e5 new file mode 100644 index 0000000..697d60a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8/60032e9cf32e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8/6022721bf82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8/6022721bf82e001511a3ba75618c68e5 new file mode 100644 index 0000000..59d582c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8/6022721bf82e001511a3ba75618c68e5 @@ -0,0 +1,110 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } + private static void DoReload(Player player) + { + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8/e0108b91fa2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8/e0108b91fa2e001511a3ba75618c68e5 new file mode 100644 index 0000000..b31a8e1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8/e0108b91fa2e001511a3ba75618c68e5 @@ -0,0 +1,391 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/80/20e2900fc02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/80/20e2900fc02e001511a3ba75618c68e5 new file mode 100644 index 0000000..3ec87d6 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/80/20e2900fc02e001511a3ba75618c68e5 @@ -0,0 +1,64 @@ +package tk.sznp.thebuttonautoflair; + +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + } + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/80/6030fe14fb2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/80/6030fe14fb2e001511a3ba75618c68e5 new file mode 100644 index 0000000..ae5e7f4 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/80/6030fe14fb2e001511a3ba75618c68e5 @@ -0,0 +1,397 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + System.out.println("Sleeping for 5 seconds..."); //2015.07.20. + try { + Thread.sleep(5000); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } //2015.07.20. + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/81/207849dec52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/81/207849dec52e001511a3ba75618c68e5 new file mode 100644 index 0000000..434f059 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/81/207849dec52e001511a3ba75618c68e5 @@ -0,0 +1,311 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + try { + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/81/a0d37509c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/81/a0d37509c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..9d7ca6c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/81/a0d37509c52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedReader bw=new BufferedReader(new FileReader(file)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/81/a0e017eec72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/81/a0e017eec72e001511a3ba75618c68e5 new file mode 100644 index 0000000..8fe8b10 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/81/a0e017eec72e001511a3ba75618c68e5 @@ -0,0 +1,322 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + GetPlugin(typeof(Towny)).getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/84/20ae50cfce2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/84/20ae50cfce2e001511a3ba75618c68e5 new file mode 100644 index 0000000..f21d16c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/84/20ae50cfce2e001511a3ba75618c68e5 @@ -0,0 +1,329 @@ +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.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.exceptions.NotRegisteredException; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/84/e0cafcb5f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/84/e0cafcb5f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..e57ddce --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/84/e0cafcb5f02e001511a3ba75618c68e5 @@ -0,0 +1,355 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/85/7082ce5ff62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/85/7082ce5ff62e001511a3ba75618c68e5 new file mode 100644 index 0000000..918616a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/85/7082ce5ff62e001511a3ba75618c68e5 @@ -0,0 +1,383 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/85/e0142d0af52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/85/e0142d0af52e001511a3ba75618c68e5 new file mode 100644 index 0000000..632b739 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/85/e0142d0af52e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/85/e0445a04f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/85/e0445a04f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..578542e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/85/e0445a04f82e001511a3ba75618c68e5 @@ -0,0 +1,108 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } + private static void +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/87/c0ee9e2cc02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/87/c0ee9e2cc02e001511a3ba75618c68e5 new file mode 100644 index 0000000..da85eaa --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/87/c0ee9e2cc02e001511a3ba75618c68e5 @@ -0,0 +1,292 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/87/e0091494f32e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/87/e0091494f32e001511a3ba75618c68e5 new file mode 100644 index 0000000..31580b5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/87/e0091494f32e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/89/e09bd143ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/89/e09bd143ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..5aac582 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/89/e09bd143ef2e001511a3ba75618c68e5 @@ -0,0 +1,342 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>();for(int i=str.length()-1; i>=0; i--) { + if(Character.isUpperCase(str.charAt(i))) { + return i; + } + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8b/b08c1511c82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8b/b08c1511c82e001511a3ba75618c68e5 new file mode 100644 index 0000000..308b3ef --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8b/b08c1511c82e001511a3ba75618c68e5 @@ -0,0 +1,323 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + new Class(); + getPlugin()).getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8b/d0c1d07df02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8b/d0c1d07df02e001511a3ba75618c68e5 new file mode 100644 index 0000000..3e53c9d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8b/d0c1d07df02e001511a3ba75618c68e5 @@ -0,0 +1,353 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8b/e0e354c4ee2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8b/e0e354c4ee2e001511a3ba75618c68e5 new file mode 100644 index 0000000..dfd495b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8b/e0e354c4ee2e001511a3ba75618c68e5 @@ -0,0 +1,341 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + int x=0; + while((x=displayname.indexOf("§", x))!=-1) + Positions.add(x); + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8c/60ddc035f72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8c/60ddc035f72e001511a3ba75618c68e5 new file mode 100644 index 0000000..1caf9ba --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8c/60ddc035f72e001511a3ba75618c68e5 @@ -0,0 +1,384 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8d/60bb3fa1f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8d/60bb3fa1f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..db2c507 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8d/60bb3fa1f22e001511a3ba75618c68e5 @@ -0,0 +1,378 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8d/e0e833fff72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8d/e0e833fff72e001511a3ba75618c68e5 new file mode 100644 index 0000000..8048a43 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8d/e0e833fff72e001511a3ba75618c68e5 @@ -0,0 +1,108 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8e/20ff3826c62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8e/20ff3826c62e001511a3ba75618c68e5 new file mode 100644 index 0000000..e3ae66e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8e/20ff3826c62e001511a3ba75618c68e5 @@ -0,0 +1,313 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + if() + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8f/205432bcc82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/8f/205432bcc82e001511a3ba75618c68e5 new file mode 100644 index 0000000..859c4a1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8f/205432bcc82e001511a3ba75618c68e5 @@ -0,0 +1,324 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + List towns = TownyUniverse.getDataSource().getTowns(); + getPlugin()).getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9/a0706393c92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/9/a0706393c92e001511a3ba75618c68e5 new file mode 100644 index 0000000..a9a1f7e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/9/a0706393c92e001511a3ba75618c68e5 @@ -0,0 +1,330 @@ +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.HashMap; +import java.util.List; +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.exceptions.NotRegisteredException; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (NotRegisteredException e) { + return ""; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/90/308d0ce3bf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/90/308d0ce3bf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..5930458 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/90/308d0ce3bf2e001511a3ba75618c68e5 @@ -0,0 +1,291 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + player.setDisplayName(player.getDisplayName()+flair); + else + player.sendMessage("§9Are you Reddit user "+username+"?§r §6Type /u accept or /u ignore§r"); + } + + public static void AppendPlayerDisplayFlairFinal(Player player, String username, String flair) + { + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/90/6069aa58f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/90/6069aa58f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..f09d90a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/90/6069aa58f02e001511a3ba75618c68e5 @@ -0,0 +1,352 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/90/e0c2706bf72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/90/e0c2706bf72e001511a3ba75618c68e5 new file mode 100644 index 0000000..fb7f1e5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/90/e0c2706bf72e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/91/a005e2c5c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/91/a005e2c5c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..1a58760 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/91/a005e2c5c42e001511a3ba75618c68e5 @@ -0,0 +1,299 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/92/60ec4bcded2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/92/60ec4bcded2e001511a3ba75618c68e5 new file mode 100644 index 0000000..6211871 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/92/60ec4bcded2e001511a3ba75618c68e5 @@ -0,0 +1,337 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/92/c0e52982cf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/92/c0e52982cf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..62be9eb --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/92/c0e52982cf2e001511a3ba75618c68e5 @@ -0,0 +1,94 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + player.sendMessage("Reloaded config file."); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/93/b0d3830fc92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/93/b0d3830fc92e001511a3ba75618c68e5 new file mode 100644 index 0000000..5482836 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/93/b0d3830fc92e001511a3ba75618c68e5 @@ -0,0 +1,327 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(Player player) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/93/b0d47969d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/93/b0d47969d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..0c1561d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/93/b0d47969d22e001511a3ba75618c68e5 @@ -0,0 +1,100 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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 player : PluginMain.AcceptedPlayers) + ; + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/98/b0f95768c12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/98/b0f95768c12e001511a3ba75618c68e5 new file mode 100644 index 0000000..3c8ae92 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/98/b0f95768c12e001511a3ba75618c68e5 @@ -0,0 +1,293 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/98/e00fcf2df82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/98/e00fcf2df82e001511a3ba75618c68e5 new file mode 100644 index 0000000..4ee334b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/98/e00fcf2df82e001511a3ba75618c68e5 @@ -0,0 +1,111 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + default: + return false; + } + return true; + } + + + return false; + } + private static void DoReload(Player player) + { + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/99/603c843af82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/99/603c843af82e001511a3ba75618c68e5 new file mode 100644 index 0000000..1efbd17 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/99/603c843af82e001511a3ba75618c68e5 @@ -0,0 +1,112 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + default: + return false; + } + return true; + } + + if(args[0]=="reload") + DoReload(null); //2015.07.20. + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/99/a045560ec82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/99/a045560ec82e001511a3ba75618c68e5 new file mode 100644 index 0000000..51d6e14 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/99/a045560ec82e001511a3ba75618c68e5 @@ -0,0 +1,322 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + GetPlugin().getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/99/e0cf6ed0f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/99/e0cf6ed0f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..b80d7ec --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/99/e0cf6ed0f02e001511a3ba75618c68e5 @@ -0,0 +1,356 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9a/e0576b12f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/9a/e0576b12f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..dbe8d35 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/9a/e0576b12f82e001511a3ba75618c68e5 @@ -0,0 +1,111 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } + private static void DoReload(Player player) + { + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9d/60c3c8dcf82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/9d/60c3c8dcf82e001511a3ba75618c68e5 new file mode 100644 index 0000000..5e3e6af --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/9d/60c3c8dcf82e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a/80754cfbf72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a/80754cfbf72e001511a3ba75618c68e5 new file mode 100644 index 0000000..d4a0f2e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a/80754cfbf72e001511a3ba75618c68e5 @@ -0,0 +1,107 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a/e0a46b3df82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a/e0a46b3df82e001511a3ba75618c68e5 new file mode 100644 index 0000000..1efbd17 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a/e0a46b3df82e001511a3ba75618c68e5 @@ -0,0 +1,112 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + default: + return false; + } + return true; + } + + if(args[0]=="reload") + DoReload(null); //2015.07.20. + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a0/e0c38940ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a0/e0c38940ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..5abf264 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a0/e0c38940ef2e001511a3ba75618c68e5 @@ -0,0 +1,341 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>();for(int i=str.length()-1; i>=0; i--) { + if(Character.isUpperCase(str.charAt(i))) { + return i; + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/302a6e59d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a1/302a6e59d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..4d192e3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a1/302a6e59d22e001511a3ba75618c68e5 @@ -0,0 +1,99 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a3/70684cbef22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a3/70684cbef22e001511a3ba75618c68e5 new file mode 100644 index 0000000..a1d7eef --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a3/70684cbef22e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a3/a0b004efd22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a3/a0b004efd22e001511a3ba75618c68e5 new file mode 100644 index 0000000..ca7e83d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a3/a0b004efd22e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(flair), dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a4/605a1b57ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a4/605a1b57ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..806a5d7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a4/605a1b57ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a5/a032f69ec82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a5/a032f69ec82e001511a3ba75618c68e5 new file mode 100644 index 0000000..75715db --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a5/a032f69ec82e001511a3ba75618c68e5 @@ -0,0 +1,322 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + getPlugin()).getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a6/30615366ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a6/30615366ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e98f293 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a6/30615366ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a7/7048aedcf62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a7/7048aedcf62e001511a3ba75618c68e5 new file mode 100644 index 0000000..1a7b96c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a7/7048aedcf62e001511a3ba75618c68e5 @@ -0,0 +1,383 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a7/a0feefeac52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a7/a0feefeac52e001511a3ba75618c68e5 new file mode 100644 index 0000000..ef924ce --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a7/a0feefeac52e001511a3ba75618c68e5 @@ -0,0 +1,312 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + file=new File("autoflairconfig.txt"); + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + try { + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a8/20776c1dc92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a8/20776c1dc92e001511a3ba75618c68e5 new file mode 100644 index 0000000..500a6bc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a8/20776c1dc92e001511a3ba75618c68e5 @@ -0,0 +1,333 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(Player player) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + } catch (NotRegisteredException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a9/600d733bf12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a9/600d733bf12e001511a3ba75618c68e5 new file mode 100644 index 0000000..c54e853 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a9/600d733bf12e001511a3ba75618c68e5 @@ -0,0 +1,365 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a9/f0f38415f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/a9/f0f38415f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..b3f26a1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a9/f0f38415f82e001511a3ba75618c68e5 @@ -0,0 +1,112 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } + private static void DoReload(Player player) + { + if(player==null) + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/aa/b0d2228ec52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/aa/b0d2228ec52e001511a3ba75618c68e5 new file mode 100644 index 0000000..a274210 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/aa/b0d2228ec52e001511a3ba75618c68e5 @@ -0,0 +1,310 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + while((String line=br.readLine())!=null) + { + + } + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/aa/e0af633fee2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/aa/e0af633fee2e001511a3ba75618c68e5 new file mode 100644 index 0000000..8458bae --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/aa/e0af633fee2e001511a3ba75618c68e5 @@ -0,0 +1,338 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList(); + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ab/2091a3e5d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/2091a3e5d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..cf4429d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/2091a3e5d22e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(2, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ab/20d4c998cf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/20d4c998cf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..ef48299 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/20d4c998cf2e001511a3ba75618c68e5 @@ -0,0 +1,97 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§6Reloaded config file.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ab/60ddb85af82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/60ddb85af82e001511a3ba75618c68e5 new file mode 100644 index 0000000..507c71c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/60ddb85af82e001511a3ba75618c68e5 @@ -0,0 +1,112 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + default: + return false; + } + return true; + } + + if(args[0]=="reload") + DoReload(null); //2015.07.20. + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + if(player==null || player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ab/e0241976f62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/e0241976f62e001511a3ba75618c68e5 new file mode 100644 index 0000000..4caaf54 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/e0241976f62e001511a3ba75618c68e5 @@ -0,0 +1,383 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ac/209cc836c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ac/209cc836c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..8e2d176 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ac/209cc836c52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line=br.readLine(); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ac/e05e031af22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ac/e05e031af22e001511a3ba75618c68e5 new file mode 100644 index 0000000..b587176 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ac/e05e031af22e001511a3ba75618c68e5 @@ -0,0 +1,376 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ae/60376ea0ee2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ae/60376ea0ee2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e8a4d34 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ae/60376ea0ee2e001511a3ba75618c68e5 @@ -0,0 +1,341 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + int x=0; + while((x=displayname.indexOf("§", x))) + Positions.add(x) + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/af/00b3c459f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/af/00b3c459f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..bcd05bd --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/af/00b3c459f02e001511a3ba75618c68e5 @@ -0,0 +1,352 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/af/a0a41840c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/af/a0a41840c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..d656c74 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/af/a0a41840c52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String[] line=br.readLine().split(" "); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/af/e01790d7f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/af/e01790d7f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..0f71b25 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/af/e01790d7f82e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b/50330699ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b/50330699ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e75cd9b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b/50330699ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b1/204e43add12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b1/204e43add12e001511a3ba75618c68e5 new file mode 100644 index 0000000..e74356c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b1/204e43add12e001511a3ba75618c68e5 @@ -0,0 +1,98 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + PluginMain.AppendPlayerDisplayFlairFinal(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. + if(player.isOp()) + { + 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(); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b2/e02b9ea1ee2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b2/e02b9ea1ee2e001511a3ba75618c68e5 new file mode 100644 index 0000000..c8fb15d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b2/e02b9ea1ee2e001511a3ba75618c68e5 @@ -0,0 +1,341 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + int x=0; + while((x=displayname.indexOf("§", x))!=-1) + Positions.add(x); + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/20455670d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/20455670d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..6a2c3cc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/20455670d22e001511a3ba75618c68e5 @@ -0,0 +1,100 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.AcceptedPlayers) + ; + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/b0196cc5c12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/b0196cc5c12e001511a3ba75618c68e5 new file mode 100644 index 0000000..99bad29 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/b0196cc5c12e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b4/a0608155c72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b4/a0608155c72e001511a3ba75618c68e5 new file mode 100644 index 0000000..eeed453 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b4/a0608155c72e001511a3ba75618c68e5 @@ -0,0 +1,319 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b6/604a1fa6f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/604a1fa6f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..e65dd1c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/604a1fa6f22e001511a3ba75618c68e5 @@ -0,0 +1,378 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b6/609d3f28ee2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/609d3f28ee2e001511a3ba75618c68e5 new file mode 100644 index 0000000..4f4cbb1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/609d3f28ee2e001511a3ba75618c68e5 @@ -0,0 +1,338 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList s + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b6/e0d9140ff82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/e0d9140ff82e001511a3ba75618c68e5 new file mode 100644 index 0000000..4b62f9c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/e0d9140ff82e001511a3ba75618c68e5 @@ -0,0 +1,111 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } + private static void DoReload(Player player=null) + { + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/a002ab6dcf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b7/a002ab6dcf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..6d662be --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b7/a002ab6dcf2e001511a3ba75618c68e5 @@ -0,0 +1,93 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b8/108b64cac52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b8/108b64cac52e001511a3ba75618c68e5 new file mode 100644 index 0000000..6456812 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b8/108b64cac52e001511a3ba75618c68e5 @@ -0,0 +1,304 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b8/b00f8654d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b8/b00f8654d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..a6ce4bd --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b8/b00f8654d22e001511a3ba75618c68e5 @@ -0,0 +1,98 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b9/20a7d70dc52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b9/20a7d70dc52e001511a3ba75618c68e5 new file mode 100644 index 0000000..8e2d176 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b9/20a7d70dc52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line=br.readLine(); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b9/40c2f665ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/b9/40c2f665ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e98f293 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b9/40c2f665ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ba/d013f5efc12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ba/d013f5efc12e001511a3ba75618c68e5 new file mode 100644 index 0000000..1a26ee8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ba/d013f5efc12e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bb/30c1a2d8c82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/30c1a2d8c82e001511a3ba75618c68e5 new file mode 100644 index 0000000..c47fb8f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/30c1a2d8c82e001511a3ba75618c68e5 @@ -0,0 +1,326 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bb/600ef5ddf82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/600ef5ddf82e001511a3ba75618c68e5 new file mode 100644 index 0000000..5e3e6af --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/600ef5ddf82e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bb/b00f19f8d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/b00f19f8d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..ed06c98 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/b00f19f8d22e001511a3ba75618c68e5 @@ -0,0 +1,101 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + PluginMain.AppendPlayerDisplayFlairFinal(p, PluginMain.PlayerFlairs.get(p.getName())); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bb/e0bd71c4f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/e0bd71c4f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..f4e563a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/e0bd71c4f22e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bc/e06e426ff82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/bc/e06e426ff82e001511a3ba75618c68e5 new file mode 100644 index 0000000..4f472d3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/bc/e06e426ff82e001511a3ba75618c68e5 @@ -0,0 +1,116 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + default: + return false; + } + return true; + } + + if(args[0]=="reload") + DoReload(null); //2015.07.20. + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + if(player==null || player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + String msg="§6Reloaded config file.§r"; + if(player!=null) + player.sendMessage(msg); + else + System.out.println(msg); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/be/206ef6f9c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/be/206ef6f9c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..e5cbf3b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/be/206ef6f9c52e001511a3ba75618c68e5 @@ -0,0 +1,312 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + +} + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bf/30eef93ec52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/bf/30eef93ec52e001511a3ba75618c68e5 new file mode 100644 index 0000000..8e09b68 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/bf/30eef93ec52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String[] line=br.readLine(); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bf/40b7a880bf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/bf/40b7a880bf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..3e34365 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/bf/40b7a880bf2e001511a3ba75618c68e5 @@ -0,0 +1,64 @@ +package tk.sznp.thebuttonautoflair; + +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + + player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + } + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0c81b95c12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0c81b95c12e001511a3ba75618c68e5 new file mode 100644 index 0000000..3c8ae92 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0c81b95c12e001511a3ba75618c68e5 @@ -0,0 +1,293 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c/206bd40cc92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c/206bd40cc92e001511a3ba75618c68e5 new file mode 100644 index 0000000..3a96c12 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c/206bd40cc92e001511a3ba75618c68e5 @@ -0,0 +1,327 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c/a03dc224c62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c/a03dc224c62e001511a3ba75618c68e5 new file mode 100644 index 0000000..12b08af --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c/a03dc224c62e001511a3ba75618c68e5 @@ -0,0 +1,313 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + if() + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c/a0bbdf39cf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c/a0bbdf39cf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..870f3b0 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c/a0bbdf39cf2e001511a3ba75618c68e5 @@ -0,0 +1,70 @@ +package tk.sznp.thebuttonautoflair; + +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + if(player.isOp()) + { + + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c0/2087239bc52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c0/2087239bc52e001511a3ba75618c68e5 new file mode 100644 index 0000000..b1c8a2e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c0/2087239bc52e001511a3ba75618c68e5 @@ -0,0 +1,311 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + + } + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c0/609e9b12f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c0/609e9b12f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..bcc3811 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c0/609e9b12f22e001511a3ba75618c68e5 @@ -0,0 +1,376 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c0/e0ca4cccf82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c0/e0ca4cccf82e001511a3ba75618c68e5 new file mode 100644 index 0000000..3bddf63 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c0/e0ca4cccf82e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c1/402ed649c02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c1/402ed649c02e001511a3ba75618c68e5 new file mode 100644 index 0000000..27b8fb2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c1/402ed649c02e001511a3ba75618c68e5 @@ -0,0 +1,292 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c3/709abd11f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c3/709abd11f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..d0b0ed3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c3/709abd11f22e001511a3ba75618c68e5 @@ -0,0 +1,375 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c3/90b90e40c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c3/90b90e40c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..d656c74 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c3/90b90e40c52e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedReader br=new BufferedReader(new FileReader(file)); + String[] line=br.readLine().split(" "); + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c4/30128891cf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/30128891cf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..98dee15 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/30128891cf2e001511a3ba75618c68e5 @@ -0,0 +1,95 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c4/60544486ed2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/60544486ed2e001511a3ba75618c68e5 new file mode 100644 index 0000000..9308b28 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/60544486ed2e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c4/e0191ea8ed2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/e0191ea8ed2e001511a3ba75618c68e5 new file mode 100644 index 0000000..16f7068 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/e0191ea8ed2e001511a3ba75618c68e5 @@ -0,0 +1,336 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c5/205ef9e6c72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c5/205ef9e6c72e001511a3ba75618c68e5 new file mode 100644 index 0000000..068a352 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c5/205ef9e6c72e001511a3ba75618c68e5 @@ -0,0 +1,322 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + GetPlugin().getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c6/508d4163ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c6/508d4163ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..454245f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c6/508d4163ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c6/70f7bb04f92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c6/70f7bb04f92e001511a3ba75618c68e5 new file mode 100644 index 0000000..2f2755c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c6/70f7bb04f92e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c6/e0f20f06f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c6/e0f20f06f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..fd7d7dc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c6/e0f20f06f22e001511a3ba75618c68e5 @@ -0,0 +1,372 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c7/3015ce54d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c7/3015ce54d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..a6ce4bd --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c7/3015ce54d22e001511a3ba75618c68e5 @@ -0,0 +1,98 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c7/e0524424f92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c7/e0524424f92e001511a3ba75618c68e5 new file mode 100644 index 0000000..645df56 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c7/e0524424f92e001511a3ba75618c68e5 @@ -0,0 +1,386 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c7/f0d24c00f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c7/f0d24c00f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..f2d8a31 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c7/f0d24c00f82e001511a3ba75618c68e5 @@ -0,0 +1,108 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } + private static void D +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c8/2097812fd22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/c8/2097812fd22e001511a3ba75618c68e5 new file mode 100644 index 0000000..b26a2c5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c8/2097812fd22e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ca/c067eb62d32e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ca/c067eb62d32e001511a3ba75618c68e5 new file mode 100644 index 0000000..50e6399 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ca/c067eb62d32e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+2, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/cb/e00c8ff2f32e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/cb/e00c8ff2f32e001511a3ba75618c68e5 new file mode 100644 index 0000000..d86ae2f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/cb/e00c8ff2f32e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/cc/10137161ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/cc/10137161ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e75cd9b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/cc/10137161ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/cc/306aac51cf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/cc/306aac51cf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..81ec138 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/cc/306aac51cf2e001511a3ba75618c68e5 @@ -0,0 +1,92 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + if(player.isOp()) + { + try + { + File 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(" "); + PluginMain.TownColors.put(s[0], s[1]); + } + br.close(); + } + } + catch(Exception e) + { + + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/cc/60cf3d08f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/cc/60cf3d08f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..54fc22f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/cc/60cf3d08f22e001511a3ba75618c68e5 @@ -0,0 +1,373 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d/a0a4134fd42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d/a0a4134fd42e001511a3ba75618c68e5 new file mode 100644 index 0000000..89db76b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d/a0a4134fd42e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/20e069c0c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/20e069c0c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..5eb70f1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/20e069c0c42e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/e00161a0f72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/e00161a0f72e001511a3ba75618c68e5 new file mode 100644 index 0000000..fb7f1e5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/e00161a0f72e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/e03bfec4f12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/e03bfec4f12e001511a3ba75618c68e5 new file mode 100644 index 0000000..db10046 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/e03bfec4f12e001511a3ba75618c68e5 @@ -0,0 +1,371 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. +return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d1/50a093b2d12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d1/50a093b2d12e001511a3ba75618c68e5 new file mode 100644 index 0000000..9005f94 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d1/50a093b2d12e001511a3ba75618c68e5 @@ -0,0 +1,328 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d1/706be4b5f12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d1/706be4b5f12e001511a3ba75618c68e5 new file mode 100644 index 0000000..932715f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d1/706be4b5f12e001511a3ba75618c68e5 @@ -0,0 +1,373 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + { + + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d2/a0f5e567cf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d2/a0f5e567cf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..b395558 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d2/a0f5e567cf2e001511a3ba75618c68e5 @@ -0,0 +1,93 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + if(player.isOp()) + { + 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(); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d2/e0d75c1cf52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d2/e0d75c1cf52e001511a3ba75618c68e5 new file mode 100644 index 0000000..632b739 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d2/e0d75c1cf52e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d3/606f612ef92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d3/606f612ef92e001511a3ba75618c68e5 new file mode 100644 index 0000000..85a20dc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d3/606f612ef92e001511a3ba75618c68e5 @@ -0,0 +1,389 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d4/a06157d2d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d4/a06157d2d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..64319a2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d4/a06157d2d22e001511a3ba75618c68e5 @@ -0,0 +1,101 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + PluginMain.AppendPlayerDisplayFlairFinal(p, PluginMain.PlayerFlairs.get(p.getName()); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d5/b0f64d23d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d5/b0f64d23d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..b26a2c5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d5/b0f64d23d22e001511a3ba75618c68e5 @@ -0,0 +1,335 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d7/60dd2311f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d7/60dd2311f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..7e4bd99 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d7/60dd2311f02e001511a3ba75618c68e5 @@ -0,0 +1,351 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + for(int pos : Positions) + { + + } + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d9/a0effc8dcf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/d9/a0effc8dcf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..ae7069d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d9/a0effc8dcf2e001511a3ba75618c68e5 @@ -0,0 +1,94 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/da/3015c517d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/da/3015c517d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..ace2a3c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/da/3015c517d22e001511a3ba75618c68e5 @@ -0,0 +1,334 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/da/60d0a320f52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/da/60d0a320f52e001511a3ba75618c68e5 new file mode 100644 index 0000000..ea1b159 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/da/60d0a320f52e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/da/a0ee8a65cf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/da/a0ee8a65cf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..771250c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/da/a0ee8a65cf2e001511a3ba75618c68e5 @@ -0,0 +1,92 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + if(player.isOp()) + { + try + { + File 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(" "); + PluginMain.TownColors.put(s[0], s[1]); + } + br.close(); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/da/b01aba10d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/da/b01aba10d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..9de04f2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/da/b01aba10d22e001511a3ba75618c68e5 @@ -0,0 +1,98 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/da/e028ee36ee2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/da/e028ee36ee2e001511a3ba75618c68e5 new file mode 100644 index 0000000..d1f1142 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/da/e028ee36ee2e001511a3ba75618c68e5 @@ -0,0 +1,338 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/db/60525316f62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/db/60525316f62e001511a3ba75618c68e5 new file mode 100644 index 0000000..f642bdd --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/db/60525316f62e001511a3ba75618c68e5 @@ -0,0 +1,383 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/db/e0beb2d9fa2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/db/e0beb2d9fa2e001511a3ba75618c68e5 new file mode 100644 index 0000000..631491a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/db/e0beb2d9fa2e001511a3ba75618c68e5 @@ -0,0 +1,397 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + System.out.println("Sleeping for 5 seconds..."); //2015.07.20. + try { + Thread..sleep(5000); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } //2015.07.20. + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/dc/20e486bcc52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/dc/20e486bcc52e001511a3ba75618c68e5 new file mode 100644 index 0000000..7d3ed8d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/dc/20e486bcc52e001511a3ba75618c68e5 @@ -0,0 +1,305 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + br.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/dc/d0bfbbf2bf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/dc/d0bfbbf2bf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..0762826 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/dc/d0bfbbf2bf2e001511a3ba75618c68e5 @@ -0,0 +1,291 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + player.setDisplayName(player.getDisplayName()+flair); + 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. + + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/dd/200daaf7c52e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/dd/200daaf7c52e001511a3ba75618c68e5 new file mode 100644 index 0000000..e4467b2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/dd/200daaf7c52e001511a3ba75618c68e5 @@ -0,0 +1,315 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + try { + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/dd/20e88117c62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/dd/20e88117c62e001511a3ba75618c68e5 new file mode 100644 index 0000000..1c1913e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/dd/20e88117c62e001511a3ba75618c68e5 @@ -0,0 +1,312 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(" "); + PlayerTowns.put(s[0], s[1]); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + if() + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/dd/a0d6be9fc42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/dd/a0d6be9fc42e001511a3ba75618c68e5 new file mode 100644 index 0000000..26cb915 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/dd/a0d6be9fc42e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/dd/e083e020f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/dd/e083e020f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..f1bc4e3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/dd/e083e020f82e001511a3ba75618c68e5 @@ -0,0 +1,111 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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(); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } + private static void DoReload(Player player) + { + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/df/300c6d49c02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/df/300c6d49c02e001511a3ba75618c68e5 new file mode 100644 index 0000000..345b5ff --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/df/300c6d49c02e001511a3ba75618c68e5 @@ -0,0 +1,292 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + player.setDisplayName(player.getDisplayName()+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/df/40c1de71cf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/df/40c1de71cf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..67e9a37 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/df/40c1de71cf2e001511a3ba75618c68e5 @@ -0,0 +1,94 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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(); + + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e/20950642c92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/e/20950642c92e001511a3ba75618c68e5 new file mode 100644 index 0000000..42da296 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e/20950642c92e001511a3ba75618c68e5 @@ -0,0 +1,333 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(Player player) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (NotRegisteredException e) { + return ""; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e1/e0d02fe9ed2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/e1/e0d02fe9ed2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e0c4ba7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e1/e0d02fe9ed2e001511a3ba75618c68e5 @@ -0,0 +1,336 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e2/30cf0cc0c82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/e2/30cf0cc0c82e001511a3ba75618c68e5 new file mode 100644 index 0000000..56b2e71 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e2/30cf0cc0c82e001511a3ba75618c68e5 @@ -0,0 +1,325 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + List towns = TownyUniverse.getDataSource().getTowns(); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e2/e09936ccef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/e2/e09936ccef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..cbee395 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e2/e09936ccef2e001511a3ba75618c68e5 @@ -0,0 +1,347 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e3/a0978eb0c82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/e3/a0978eb0c82e001511a3ba75618c68e5 new file mode 100644 index 0000000..7dc19bb --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e3/a0978eb0c82e001511a3ba75618c68e5 @@ -0,0 +1,324 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + TownyUniverse.getDataSource().getTowns(); + getPlugin()).getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e5/607d36ccf02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/e5/607d36ccf02e001511a3ba75618c68e5 new file mode 100644 index 0000000..48601d9 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e5/607d36ccf02e001511a3ba75618c68e5 @@ -0,0 +1,355 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e5/e039cfb8f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/e5/e039cfb8f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..92ad0d2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e5/e039cfb8f22e001511a3ba75618c68e5 @@ -0,0 +1,381 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e6/e09fc270f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/e6/e09fc270f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..74f40d7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e6/e09fc270f02e001511a3ba75618c68e5 @@ -0,0 +1,353 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ea/a085533dcf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ea/a085533dcf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..7134c94 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ea/a085533dcf2e001511a3ba75618c68e5 @@ -0,0 +1,85 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + if(player.isOp()) + { + 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(); + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ec/30fe1899d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ec/30fe1899d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..cac4a74 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ec/30fe1899d22e001511a3ba75618c68e5 @@ -0,0 +1,100 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + ; + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ed/e0feb053f22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ed/e0feb053f22e001511a3ba75618c68e5 new file mode 100644 index 0000000..ad75455 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ed/e0feb053f22e001511a3ba75618c68e5 @@ -0,0 +1,378 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ed/f09acb29f62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ed/f09acb29f62e001511a3ba75618c68e5 new file mode 100644 index 0000000..82303dc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ed/f09acb29f62e001511a3ba75618c68e5 @@ -0,0 +1,383 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f/30dc59d9c82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f/30dc59d9c82e001511a3ba75618c68e5 new file mode 100644 index 0000000..5f1d24a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f/30dc59d9c82e001511a3ba75618c68e5 @@ -0,0 +1,326 @@ +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.HashMap; +import java.util.List; +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.Towny; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + //List towns = TownyUniverse.getDataSource().getTowns(); + TownyUniverse.getDataSource().get + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f/4081c9edc12e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f/4081c9edc12e001511a3ba75618c68e5 new file mode 100644 index 0000000..99bad29 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f/4081c9edc12e001511a3ba75618c68e5 @@ -0,0 +1,294 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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 = GetColorForClass(flairclass); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f0/30004907d32e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f0/30004907d32e001511a3ba75618c68e5 new file mode 100644 index 0000000..b79c5bc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f0/30004907d32e001511a3ba75618c68e5 @@ -0,0 +1,107 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair) + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f0/904f621cc82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f0/904f621cc82e001511a3ba75618c68e5 new file mode 100644 index 0000000..ec11ba5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f0/904f621cc82e001511a3ba75618c68e5 @@ -0,0 +1,323 @@ +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.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.Towny; +import com.palmergames.bukkit.towny.object.TownyWorld; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(String playername) + { + new Class<1, 2>(); + getPlugin()).getTownyInstance() + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f0/e006e534f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f0/e006e534f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..9463dc6 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f0/e006e534f82e001511a3ba75618c68e5 @@ -0,0 +1,112 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + default: + return false; + } + return true; + } + + if(args[0]=="reload") + DoReload(null); //2015.07.20. + return false; + } + private static void DoReload(Player player) + { + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f2/e0fcf2d8f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f2/e0fcf2d8f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..b6b91b4 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f2/e0fcf2d8f02e001511a3ba75618c68e5 @@ -0,0 +1,356 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f4/00874f9ef72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/00874f9ef72e001511a3ba75618c68e5 new file mode 100644 index 0000000..024c372 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/00874f9ef72e001511a3ba75618c68e5 @@ -0,0 +1,385 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f4/100cd858cf2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/100cd858cf2e001511a3ba75618c68e5 new file mode 100644 index 0000000..bd4bfa3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/100cd858cf2e001511a3ba75618c68e5 @@ -0,0 +1,92 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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": + if(player.isOp()) + { + try + { + File 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(" "); + PluginMain.TownColors.put(s[0], s[1]); + } + br.close(); + } + } + catch(Exception e) + { + + } + } + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f5/606e09ccfa2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f5/606e09ccfa2e001511a3ba75618c68e5 new file mode 100644 index 0000000..17c8cb7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f5/606e09ccfa2e001511a3ba75618c68e5 @@ -0,0 +1,393 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + System.out.println("Sleeping for 5 seconds..."); //2015.07.20. + Thread.currentThread().sleep(5000); //2015.07.20. + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f6/a065bef2c42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f6/a065bef2c42e001511a3ba75618c68e5 new file mode 100644 index 0000000..a0e0892 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f6/a065bef2c42e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f7/30fdd3fbc42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f7/30fdd3fbc42e001511a3ba75618c68e5 new file mode 100644 index 0000000..8335a11 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f7/30fdd3fbc42e001511a3ba75618c68e5 @@ -0,0 +1,307 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + File file=new File("autoflairconfig.ini"); + try { + BufferedReader bw=new BufferedReader(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f8/e0c1b81ef82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f8/e0c1b81ef82e001511a3ba75618c68e5 new file mode 100644 index 0000000..d17c526 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f8/e0c1b81ef82e001511a3ba75618c68e5 @@ -0,0 +1,110 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } + private static void DoReload(Player player) + { + if(player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f9/6022dfe8f92e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/f9/6022dfe8f92e001511a3ba75618c68e5 new file mode 100644 index 0000000..f25382b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f9/6022dfe8f92e001511a3ba75618c68e5 @@ -0,0 +1,391 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length)) //TODO + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fa/201779a3d22e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/fa/201779a3d22e001511a3ba75618c68e5 new file mode 100644 index 0000000..b43b082 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/fa/201779a3d22e001511a3ba75618c68e5 @@ -0,0 +1,101 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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. + if(player.isOp()) + { + 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.Players) + if(PluginMain.AcceptedPlayers.contains(p.getName())) + + player.sendMessage("§6Reloaded config file.§r"); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + break; + default: + return false; + } + return true; + } + + // If the player (or console) uses our command correct, we can return true + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fa/60103664f82e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/fa/60103664f82e001511a3ba75618c68e5 new file mode 100644 index 0000000..d23e173 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/fa/60103664f82e001511a3ba75618c68e5 @@ -0,0 +1,116 @@ +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; + if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0]) + { + case "accept": + { + if(PluginMain.IgnoredPlayers.contains(player.getName())) + PluginMain.IgnoredPlayers.remove(player.getName()); + if(!PluginMain.AcceptedPlayers.contains(player.getName())) + { + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AcceptedPlayers.add(player.getName()); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(PluginMain.AcceptedPlayers.contains(player.getName())) + PluginMain.AcceptedPlayers.remove(player.getName()); + if(!PluginMain.IgnoredPlayers.contains(player.getName())) + { + PluginMain.IgnoredPlayers.add(player.getName()); + //String dname=player.getDisplayName(); + String flair=PluginMain.PlayerFlairs.get(player.getName()); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; + default: + return false; + } + return true; + } + + if(args[0]=="reload") + DoReload(null); //2015.07.20. + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + if(player==null || player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + String msg="§6Reloaded config file.§r"; + if(player!=null) + player.sendMessage(msg); + else + System.out.println(msg); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fb/6086a867ee2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/fb/6086a867ee2e001511a3ba75618c68e5 new file mode 100644 index 0000000..8458bae --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/fb/6086a867ee2e001511a3ba75618c68e5 @@ -0,0 +1,338 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList(); + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fb/806b4e4ac02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/fb/806b4e4ac02e001511a3ba75618c68e5 new file mode 100644 index 0000000..27b8fb2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/fb/806b4e4ac02e001511a3ba75618c68e5 @@ -0,0 +1,292 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + br.close(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fb/b0ab4825c62e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/fb/b0ab4825c62e001511a3ba75618c68e5 new file mode 100644 index 0000000..e3ae66e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/fb/b0ab4825c62e001511a3ba75618c68e5 @@ -0,0 +1,313 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { + if() + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fc/3086b133c72e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/fc/3086b133c72e001511a3ba75618c68e5 new file mode 100644 index 0000000..ab2c50c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/fc/3086b133c72e001511a3ba75618c68e5 @@ -0,0 +1,314 @@ +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.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; + +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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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(PlayerTowns.get(player.getName())); + player.setDisplayName(color+player.getDisplayName()+"§r"+flair); + } + + public static String GetColorForTown(String townname) + { //2015.07.20. + if(TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fd/80dba9e9f02e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/fd/80dba9e9f02e001511a3ba75618c68e5 new file mode 100644 index 0000000..01cd525 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/fd/80dba9e9f02e001511a3ba75618c68e5 @@ -0,0 +1,360 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fe/50283165ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/fe/50283165ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..e75cd9b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/fe/50283165ef2e001511a3ba75618c68e5 @@ -0,0 +1,343 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fe/e0151cd4ef2e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/fe/e0151cd4ef2e001511a3ba75618c68e5 new file mode 100644 index 0000000..071c147 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/fe/e0151cd4ef2e001511a3ba75618c68e5 @@ -0,0 +1,347 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + player.setDisplayName() + } + player.setDisplayName(color+displayname+"§r"+flair); + } + + 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. + //List towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ff/f0d7250df42e001511a3ba75618c68e5 b/.metadata/.plugins/org.eclipse.core.resources/.history/ff/f0d7250df42e001511a3ba75618c68e5 new file mode 100644 index 0000000..4ac46c5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ff/f0d7250df42e001511a3ba75618c68e5 @@ -0,0 +1,382 @@ +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.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/ + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + //System.out.println("Original C# version: http://pastebin.com/tX8xCPbp"); + //System.out.println("The Java version is... Also made by the same person."); + //System.out.println("With the help of StackOverflow and similar."); + /*catch(MalformedURLException e) + { + } + catch(IOException e) + { + }*/ + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + //System.out.println("Registering commands..."); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + 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) + { + AcceptedPlayers.add(line.replace("\n", "")); + } + 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) + { + IgnoredPlayers.add(line.replace("\n", "")); + } + 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(); + } + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + //System.out.println("Registering done."); + 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); + } + for(String player : AcceptedPlayers) + { + File file=new File("flairsaccepted.txt"); + try { + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + for(String player : IgnoredPlayers) + { + File file=new File("flairsignored.txt"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(player+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + } + } + 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; + //System.out.println("Author: "+author); + 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; + //System.out.println("flairdata.length:"+flairdata.length); + 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); + } + } + } + + 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; + } + + //It has to store offline player flairs too, therefore it can't use Player object + public static Map PlayerFlairs=new HashMap(); + public static Map PlayerUserNames=new HashMap(); + //public Map PlayerFlairs=new HashMap(); + public static ArrayList Players=new ArrayList(); + public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. + public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + /*Player player=null; + for(Player p : Players) + { + if(p.getName()==playername) + { + player=p; + break; + } + } + if(player==null) + return false;*/ + return PlayerFlairs.containsKey(playername); + } + + 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; + default: + finalflair=""; + break; + } + if(finalflair.length()>0) //<-- 2015.07.20. + return; + PlayerFlairs.put(playername, finalflair); + PlayerUserNames.put(playername, username); + /*for(Player player : Players) + { + if(player.getName()==playername) + { + PlayerFlairs.put(player, finalflair); + break; + } + }*/ + //System.out.println("SetFlair - playername: "+playername+" text: "+text+" flairclass: "+flairclass); + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : Players) + { + //System.out.println("Online player: "+player.getName()); + //System.out.println("player.getName ("+player.getName()+") == playername ("+playername+"): "+(player.getName()==playername)); + if(player.getName().equals(playername)) + { + //System.out.println("DisplayName: "+player.getDisplayName()); + //player.setDisplayName(player.getDisplayName()+finalflair); + AppendPlayerDisplayFlair(player, username, finalflair); + //System.out.println("DisplayName: "+player.getDisplayName()); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=PlayerFlairs.get(player.getName()); + return flair==null ? "" : flair; + } + + public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + { + if(IgnoredPlayers.contains(player.getName())) + return; + if(AcceptedPlayers.contains(player.getName())) + //player.setDisplayName(player.getDisplayName()+flair); + 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. + System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TODO: Multiple colors put on first capital letters + String[] colors = color.split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + System.out.println("B"); + for(int i=0; i=colors.length) + { + System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap new file mode 100644 index 0000000000000000000000000000000000000000..08e6b1835531613769e8ad5ec29258df5381c8b8 GIT binary patch literal 560 gcmZ?R*xjhShe1S2b=vdAllRFvjPggr15bJY07Osg`v3p{ literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap new file mode 100644 index 0000000000000000000000000000000000000000..08e6b1835531613769e8ad5ec29258df5381c8b8 GIT binary patch literal 560 gcmZ?R*xjhShe1S2b=vdAllRFvjPggr15bJY07Osg`v3p{ literal 0 HcmV?d00001 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 index 7e057559521eebcfc050afbff1562fc578dc52f0..c83598913ba658a72d99c552861b0dfce44397cd 100644 GIT binary patch literal 7535 zcmajjYgkQb9|rIpir8h*2yZe=!n|XujdCtcLo}#R4kJ?9ro$F$H<)qgNR(_+q14jJ zDcR%IWd>=hDaYiH29c0bDZQmc#ay%g&xgBDzW%QJx}X1gp4Dov)k7kYXiF?C0s~fC zDE%w~fAwE)q4bt}1}T;6{5^t{>((edd;%{i($djeGRV2b1&7fU(c~)aig@%i zcb31>M};2b%zWGVJ?P0}$kmIt>_k^Fm&m?!H1jt*2gtpAR(mMrbT;~Y+~%_Va0W?B z8{+;w8`Y4q!|1UV5IN1wuJUaEvZE|O! z7rtcPH+3fZ-bdsrd+rDH-lfdDCfcD-3SvDP%>?wSQ+D(xTX`=f1?DMz^o{7;IqNft z;EFtETDE{k&*E!o9$me*eXyS)cVAO~Oj|AbyL&a{qem2=A1G!n zbIM1rk&>&1)uf}Rr&o(T{A5WSx{HFGbMuZypSg(TL*pXRx9ojR^JfO#R>AyPQg_Cz((Es|1oNI})N566YshAJ8beoLc^Ef$I(_)3bC4*dI_NB)h`xOvK z54cJE3srxOxn$6Qv%*Gw&#xr=Ry8z`9<>ar&gfv z^W7)<`h?<_e?Yz~<1l+bD5a-iNKGf@NeVy6y&Y-mD=6J^X#B z*uzhqvkrYkTL`(k@f>vH$>hR$ek{6yB3R6GV>C0T z3?&x~RzF0q>CHU!=mYdWGPhCB(%VJo1H8y(t!bCg!&fLNU#)F*4Aym;O)d;MG7eq( zN1&J&?2C-h?2=5FUvhzL%VPwqq;0d_6gDd36)|r2(vGx2rFDub!+Y!O$E1 zbfX8&$#r_6yId#dzH@L#w?0R%8b81d{Z{KLntxi48R*j&x|0v=`jiIyFze+?(fLsQ zM)cBBa?a~Ct*ZSid^< zIz0N^b3W0d)j+xry=z04=t5AAJ9^NWPRhsW*rDr1k_+}dr=ySdC6`SKoP=I&#CjB= zW6|UCI;el6!Wg|ci(I%D^B?piFLL$$u>R-|7P20{QYpHj3G=VLw9(f*`$+4WPU^S@ z`?FDtT=rzyBlJg|AH=-uO6o)O@Eme}O+hjGvE?jZBGsTTUdr4zDi2+5$9i1GUqT<= z)-J9qB*duEi$j@@Z%anM{mw*8i1}}LN3f&tdD-WqlMt?_J}7&QBzl z?f88Hdd7)bnkTa5ry|&g;6&!G*O#IjI=`m;=gFhd8y(2ir{;`8SJ{&b*7>IBPdjSF z9$|v}Q1pzqxixqQ~4M7e2kML*Eufu0HqQ=ja)m$oWkU73jt@S-yQ@8MwQl^%LLbN<-h-CQw@^1{U`Ddt!7Wj<$kU-SlT=J$hi z(OnBF#d%~W=6(JP?%Rx9a{k)-Pw2T>EZ=p%16?Dq{7$Wp=*h9uqd8_nXN2N8YSOe|qPcIDh5qrbp-jx5)XhKe#~7*S|P}dH=KILiFKmbo~X)%Pyy&Hw@w zFn?wY^Ty=w(EAnU(LQ8sZ^Kt|uPpLAc^8|}N312+1P-i4zc7njwnzFBeYO#~v(CXM z=u7&OR~Fa`hv>f#@rpnVXby=nuao*X%XyhyK8bobM>< zgC6uwpgCU^_du7PCKuvgzsFB2fBj0%Et=khKG>J_lxH@eXKzoYedC{`qTiiN&e!%n zh+dg{gyvad6Mss@ecH0E(?PfKV!lk# z13h;(xvFm9C;Wu9Y0x3sPlJUe=qvh>3#V=sqj$C*6!WT>T{qC>PssVOlp=Jad(5+? zh3MAj$c1Gg8g!?0<~q8U(arWVzvg%m{lP|Z?tsI2^rCY1$!_=N6!fnDk*nv*5243w zVfnCH75d!vSn+y=L;HH8udHO=@unww@doB5`YrhBueBdJ|1|6+`ft5he%kUE=x>ep Hi|hUapY$)t delta 21 bcmaEFbzXUcH3y^7<}DnLSb)@ii480OURMYR diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap new file mode 100644 index 0000000000000000000000000000000000000000..d68c7ea7eef78e36d82ed1a38b41ebb55844f91b GIT binary patch literal 28724 zcmeHQeQXlaCZ6{_ z$G*EdzBu!4iSt@=WXJdQJbs?v^YMG$^U(88J`#Hg?fF>e*Z=;_ul;O4LMV)G?wih# zkpiWLK3t&2Cp1|#;e!x7;n9=}qaMSYlZc|Jd5cK%X)0-QL02-WJ}1qa+#XH{ZhvPhHyRSg{zeL*!1Jx6qk$K(Zh zD%G2ijz}1;$Rt>Xr*7b}`%)HGb&JZHM$+&K(+t7q3^QxxWre^yneuHdYN`s=mat;v z;FRi&2AipHYMN2utmSh_7&TjDftV^?3WJa#)T|i_>|y8;w5xp0@X6$NpKcm``7`gV zaJ}8T^3?ek&%H8KNsl8H^w?*aN*~SkS)bGMeQ?z?T+K45d6ucU@1$0kQ}qc@pEM8R z^Gjh`M`(W-NnW+5VSi9LY&Z`39x;iW%^Rvti;8bSElNfJaFkm|-?qOQtEPz;ku zRsp^cJ$=&9RD~-cjQT2XUQng6;ZF~rNsXr_Qj^nX?irpO9Z#J(J{mz2cV2HhOy)tF zm6*)Z^)jFL$b7o|9_?h;pVHHC^}91@zw>fz+4+?dU50Nq9SWgc8t7rNkeeYU`x?(X zEbj?yIL>xEP?xG1ak$FuCn*a<&yTSz)x#YtY=3^QHlQ zmqRUX@C?ISqhKoJICw~8Y;@WUL!F;@x^?Fhs6{sC3JmeB2x?6vIS?wEY*{F*ro&*2 zQw}%2t^6@oWL-BXo*~#ImZ2>`ET9IK@q%os3=uqV5b8j?0Mp5wVJ;nKkb?R-o?p47 z2h5&K0ZdT)%$d9^qWVxjq=@dbGiv>$fkitjoE4D!RwE zdqsEkhYtfBhf#ehHjzGyij7rl#R&gQeL?8JEzSskpvx8EJNuKY8vy+nXvIuH_d}nH zdH-?xA)Z%5JLe`xUVUg9>QbCjt(;7iOma21Rtz1wA{5V>Mh@EtWI49|3XbG1xI;bO zB%q6D*sl$}y)K;EZ2q_V-L2d)X?wQz^7V@jlUPs3WZ=-|?U)q(Z@JF?ch%*8*IfR$ zH(~pqYDmXVq!tyDXDvkTZ&8H4<4~@0zYbj{Xm7EeBvhqJ2G2mtF^gvn6Fc^0txwjg zTs;JEmoT(MDdEl286&;q_0GeUz4P^JZwBa{#Wr#snoGO? zx23)F()RYw08K7pBS9TZu1(p>Cf6RR-Q+GfFl$`_;r2}*5PnhLfDniFWSORjE3SaB zBavjyejWkNBJ>Z3HhZU*fG1nT#54i&f%~FHmgrUwW;+1j13N}JyJbsFW_&Jv>i!NDi?oS?#jj$jEjFKH@>=rEu_O?T?gHFME7*WSE z$d02OEOTT`oJJ_Y-UE3u$+hJR5ICA_T?*h3zyX%f^r!a~I39F4+vve0<6LG6*{n*X zJg0>@(<_ZZfoIc$u{lDEugXQPTv*77<1SGBeopg`5+LqILFCNT-v{Db+7m; zo6cxT&cNFz;AtmtEpk2&^e|6aS)$7F&Jufrfh_g&Vw-XK*Yv#YSxtZ55K4X4g;Hl+ zii;$Y@m09J=8(I`iAp87#U1gE9-Jl|lK4~rM`2$%Y_u)Q@s|zB@vut{(Q=afempr#7k`Q5~ysYJj zIR}Y^wF)5=ip3>qn*FUL<57o<{zs@T_ecEX?%s&pkqVm^F*6V8lr8@K zx(fBPWhZ5xuX=2~YN&L;>RP$QPb;@=NGlUAt(NJI<&EzuYeTfsm@)LUVNYJ{K!>bCBOvstilxr-k^YRIw?S@N=dq;dsYX}p;J#Zy zZS3*h7cdAQ@mn*q$$=z{hBmMa>zI+t$$HxIEW(ODP^0hoEQM%&)d@+hzjHy-jf`$9 zF>M@}&bo;<$=T9glV~d+!rh!l_jyr?H?@}szxP~#s3g)(dswnvq@6*ns1#|YFuC%4 zZuE56y~L9(Kgbkz66-PeVKYe2K zL=sOFG^)ZZgq=QGIA5TQmYh{hi^4=;9uBBs;3X+=6{tCHsz!NrvKz@m1B_Q%PVN7F zfWTeH*$7drZT(^m)?3%KNYsbq?7G9{M|Zn2qvm3to^LjgN)@eDtm&WIWL*kO3kE4;j%P z)z?sC*^wo)E><*p2L8i2KwIDNCIePx*(uJbM{J2pprX-SRG>Yy; zP~D4S-4%Upy8y?#-?~x+j=$Q?LeK4HeA4dt%PvIxxeF0tSa`7#<uRi-gH-bCa`?X9tX#Y`pW= zb*d^0@}*!{ki(1xx!m%H-vn633ocP`iDfQvM_Z$KQR`3M5ndGdZTq(S5J)i=?P(M* z+8cW*Kra%bR3a7ye5Y_>a>C?<$$cQdhp^pq1rb<9dK&Our2{m%Vqam0R3pphv*1AL zb&_FHpNkBGJI<)Hv0?U`3jCLEoHs6e(>cHDTz25Nla4wIx6)B{SSh8ZvF9+Jfz`8K zhKw&gxP0iEtu|dl` literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap new file mode 100644 index 0000000000000000000000000000000000000000..08e6b1835531613769e8ad5ec29258df5381c8b8 GIT binary patch literal 560 gcmZ?R*xjhShe1S2b=vdAllRFvjPggr15bJY07Osg`v3p{ literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap new file mode 100644 index 0000000000000000000000000000000000000000..08e6b1835531613769e8ad5ec29258df5381c8b8 GIT binary patch literal 560 gcmZ?R*xjhShe1S2b=vdAllRFvjPggr15bJY07Osg`v3p{ literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources index c3d371019fc9b0e4655acc8840e0af00e325ed42..1956ab270663b39c21f258361080d640f71e4828 100644 GIT binary patch literal 28747 zcmeHQ%Wl&^6lGnhJ60@^rHHMWhad4sl`7G0kXWFyV29kqEe>uH*-lHviZ$$z`U89c zYY<|^ukZm~vSFOKiQQ%<=>w_u94X7u_4xYSJ7>0{@|gNKivoc;Ow<>%wh zQJCdXYUSa65^ZjD_9jE?`6RJuV39yjN4VU2w!8PrVuZSz8@(h7)14^E!#AV!(2jaZ zJkBD!AMH;L?cOMjw(@i$?I^~L`_XLFL6~IfVW~8^+E^ZiM|STxTgT#{pU);)&aYp* z!tVQVoQ8Qk8rEKBkmdFu8_&#Ahx^3w0*`y7t9-9w!Uu5@W%eZ2d*DPGKMs?)KYi|& z-VepBSNmb+{8bM=I!#W8b{=N$R!?&7t;OqT9d&F(8PQuBs_ck6LuJM`cwyWRS-`sd==V=seG36I8kQ|ORyayD;y&hC4v({oOZ2nYkY=U3a+NU`@Y1L@1~#^mm*F}MV1Ae z!fef3`We*mtsi@*3zlN)%a*Cd+IE}Jp@MqCb(;}7>mgwc(olm!lLANUfg8t-)@sdH z`cN<_Y#0*`L)c(TrAXNbn^KCX5;ZEg{IxM`6ewuFqM&&38vM2Ei%E+H4}{YYAx`_v z=B!(O-An57Gdhl#|;Dl`hosMxy_v1&!jplC~4t# zS&;(4e87CB1^A*o!35=k0R71QX6Am{6@()9?_BA(0q>u-#psI)&91L8!8n-D(rz=L z-vsn`1#d`W1{BXL3)EcaU33sCHayV#XN|X2%|}*<<*v7ly%h=&VAqRXZ)Ml(%FZI} zda>&@an~yaA74oErxAxPz2I39REc)x+X-xCfrpXE1;pw`>^TCWuQnLOTw z+>hLEWbT*!{VV|bfqnzg?-%|3P&}92sRriLdgkNH22Vkd`=NN6sCY{B7t|lj2h7Jv z<|8ixqUdl&?l&{{%ZnFL>jm$xTq12wwM!OyDbDqx)@x?1SEAn&47?xA$4utq;zkqH zdTakUVG{F^)h>>cjmZ5b=6-pdiTpzybUFb2W}<)ke;d&Iq4yi8_jikG7w&R{;@KL- F^B+Mx&c^@% delta 8 PcmX^8fbkLUhDU4w6#fJ> diff --git a/.metadata/.plugins/org.eclipse.core.resources/.snap b/.metadata/.plugins/org.eclipse.core.resources/.snap new file mode 100644 index 0000000000000000000000000000000000000000..dcc83ba791c578f747e8776839a4160b15aff355 GIT binary patch literal 23598 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 literal 0 HcmV?d00001 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 index 66f87be..592b8fe 100644 --- 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 @@ -1,2 +1,2 @@ eclipse.preferences.version=1 -org.eclipse.jst.jsp.core.taglib.TaglibIndex=CLEAN +org.eclipse.jst.jsp.core.taglib.TaglibIndex=DIRTY diff --git a/.metadata/.plugins/org.eclipse.jdt.core/1508644233.index b/.metadata/.plugins/org.eclipse.jdt.core/1508644233.index index 8e174037078bc7033d277436e58e329a1fdb6006..fd8221b53b2f4a647b642c0b2e505e1286a9cfd0 100644 GIT binary patch literal 15141 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 j%uPq~>+f$py%*bv;TZKdRGAZo96z`LF*AR#yBD diff --git a/.metadata/.plugins/org.eclipse.jdt.core/1934142626.index b/.metadata/.plugins/org.eclipse.jdt.core/1934142626.index new file mode 100644 index 0000000000000000000000000000000000000000..34eb545eb1fd9a6a99dd5347d2858e87655c373a GIT binary patch literal 221358 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 Q_2KD86}cRB@V5K^KO8GB)&Kwi literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/3089967703.index b/.metadata/.plugins/org.eclipse.jdt.core/3089967703.index new file mode 100644 index 0000000000000000000000000000000000000000..25261efb03ac87e99c86c0701e73d24f88091cd0 GIT binary patch literal 233782 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
  • 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

    JJR~V?;$xY@JGxNAvqgu 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 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps b/.metadata/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps index 2ab67ccb1c65a07098f601136d7f1a952b54280f..71eabc0da3772f46a9870b3ea8c215deb24ee99f 100644 GIT binary patch delta 219 zcmbQvy_3gknUfgofqgTDg_xG30IBLibp*;Hfw~n78vLzTJzGvU@5gsB7j+_XwUwUx)dA-+LhCWYce=(FZ(kBH z`C8J^wQdm!P`^k(F;a!RK@P6ymxGf;403xpa%^QRXq-9%LBXq}4vHLV;l>@T;r{gj z#Zy`+9U2yaSQw#;2=v}ARJim~2TcJhl#?15y=Ejo-kHcj{1_b@1DHAda`pC+gh5!> zdQ9ltvcbqK}D?(*OVf literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/2.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/2.png new file mode 100644 index 0000000000000000000000000000000000000000..4768f9574b046bb13ba7d5e57a31af547462687a GIT binary patch literal 436 zcmV;l0ZaagP)W*ZgU5A$la1&J8)R;x#ymp*_pLi3~1KhV1J_yVUGrLd=WxZMOve7^qP=KH0h8i zoI^Z%!-zHN*zY?W7(a&X=rzcP_n^vcMyyfC{*NKgoe%JiD6qLyg?#b>jOeu9slFvv zsSo`<0k}s|ID^%N3T0}i!G>#<7p5au!evOt?|K8~y&B9o3lQW~Mjhqi6Vqm01xoby z1o#{ZxQEif*)rg?rYLo&xfau~KWUZ7Hjd0I@DP!+6T_fH$pYj@TI&IBTiUz=+*4pI z4?c%Xg0jF5XIOxyv}uhx(m$#|cF%AUuia0W7?2>ytFRWiFr7l}vP<<4xm@ToodQDI zZIC7AAToUlvE?fh1$TkGJrC&n^)g|Tx94EdUn11Lu|)O0!#eQJC)R5qxK8MY#pgln e_HX~f|HKzR&77BCUBCnY0000)*aR>e1fKOSfO`SN#%e&}w%-3?%M1RmK0gx)&j5>o zwo(h z@&7w^HvaF}(fGd;h(T=o=?VWqas&+k0p~e6|Gj3X{-3_L0r0k6%^tf6Jx0|7RSV09I(w6@X#@jE|wYa9i*Hu;m5+SD&8=$M^t-0n7~^ z|C{zU{cqXVg24M*z+xadf&nJm6ZSu8Rl)zljb%_=3Z_9~AUT2tq^xWGZ$Bgcf5*W`FZ1Z`}N`{&?T9|8pI9l5YF^|KOjbtR*w&`IA52XU+Xp|Lb1gf8XfW2XiJ!1kOrS ms81HRk#fwLWWuk@z_58+^F9&IJH~0|GN#66%`Bl-YkUcrsVQ{V^aVZo| z4Px(a@u7u7XkQ(`)LvZG>w63hd|hT!qGOFsZV-Ns&?~B%Q}H*!;)-!5o-{ z+^(j$w2x|tn?{z70W(ztrMnHfjZql4%`}p{h9~EbNI-BuJ| + \ No newline at end of file diff --git a/TheButtonAutoFlair.jar b/TheButtonAutoFlair.jar index e64d7f9adc479e2ec10699f9183c01c0298ccbe5..dd5b9623325b9b312a0b9762d5c640e933df040c 100644 GIT binary patch delta 10560 zcmZ8nb97zbwvKHZjcwaTW2dowVw~7Mv2kKGjoF}S)YxonHdgcc>wV+Bd+#25kFnOC z-#5pcbL~IY+Ve~P0(~YzXiK4|A_GuHjHMgc|WHMZ2esN#*Ba{0Cfze8^E_5cvjS# zBiLTjS)uq?hfr|zbF zlP(+Xrt`JJ8iY1rh#F@mN)o^f=lgqkeBz60!p4_0!_Sfmzfs;T6F6=;NY>{>3x}wF zKSKw>t1H1Hs1uwM<@-WHK(sYs_`C8vLT|!d8L;o3oF7%0-m=W<|{+Tq%qMjoB z9dP4O;r*|f43s#B0t#ma{WTD=Aff)Bfpi|F>7yXbzbJZ=eXxHa#PYq6e<7EUM4*#D z5Gci8e>qJLy0?EVO&9u6EdT3;s3|q75$P{cHudsfX8trF#@{!c;2o&HgTjiwzu`8S zH?+e*qbA>iNSlR#x(+@#x`aVf)_hIW*sRDftr1=!P#xkKar>#Rc2EjR3KS~A7`82- z4bVjLglblH1X$9kM~E3VCl8- zf?mP+JO%oZCy;shGWpQ^(|@w}_omVzMC~_no<|tG_KlCg!(uI$`SVm#yQLNl+0_<7 zP^6t4pT3BQEaQdk6|(Y%4GDXR0#$mn^W`#~MSY}X$Wumsv=_LmONEbUT$S8d=O>*7 zw-qu@J(p&AmqbxfZ9rx)5QLj4LoeQlhAI)lkYKIotn>ho_m7%MNrNhuWwNIBCTy+h z^~euu8wUVk@OXQZk{w`Z^{du1#clL=6QG^atJ<3#oH(v%$2S~Pv$Ie`SSv7=K`%Cb8@oPX1H7V&L>Z!=YCp`*vk|qt-H$g+I zuYEthe7}zNh>~E&S^nsWWp5DI?0* zj5z+|xaBTb0pPqfk4OIxnI-yW6lNVIm zOhFITW;#-9uj_cNM^34gg2teUDc8Ax&*=q5s9UbPEjDVoKU$7^!3{83hf<>3`Q`~U z7Kq{*`v&hBAip3#-SQ<&f&gkCpOZtzf~sm{Wr`myxow^>X(%q=(MLO8zKpG$>Y}V+ zDC`*S7`a4qtKjVS7r3U{SR2%}yI@$gAyHzU0u%E5Rtri&cGyC@N9+zhC3bc`UxFZHe0&4~>= z4$68iIZR8+6pWXe)`>gBg1x}wg&gx5!FBD!Cc)lxCD6VP)ity zlPO+RRCD<)oebwzcRe$GYiU8m2*%F}{9&2g@q2}WZ;4F)fV`n`4aK$`nScotQCQ3?hsu#wjW-QUu`3)Kj5E(bgV?bvQIt zyUZt;wkKB-&|t_kDV5${*t_Mj>F1K3PFDn6x}qP>TE+Q#0Xg@dKY<^=W5g71>;|^nvMq`Lw+=>?bh=vf;@h5*D**ce~oe&@yc!pFaelcF+jed409d>(I zzPh;H7G|tzaisv(=1c4@S4}u=_vtscMtPx?vecp$2O^;RunsuVxu2)HZlU~$AM@bNE?$_D!aif-KQ6BQ6hMOfn5WoX zfjNd@{Yg;qiFwyU!1_8$J*!$2Uu~OLSdLIwrQB#I$8;Nr_KJvn&Bi?N^&@RS?F2+d zY<49UvQLlE=&2=(PHcX==K54u={NhCh!%6P>WH|z5^~~il}0oOA?uI}!?1HZuk^cdgQgsujFvTU$)Y z%MvXq+sQ7VUP-aW(p|^9gv0dk;X#p_KYS=qFm@i5Qf|w7b?!(;s~f4u9H#pjee2T3 ztzG0c#Y}irPar%AZHq1J@f$)Sg8ll;eG~tpi9kGE3jmlN%gtjZi)}LYKWtiyK|s&*?pD3Tf6@;0OliA;zb|% z+SZkTwq$*ntp(r1eDL7Vzw`*3>LEmm?{0Y9^A2sG)*%-D^KUyWx!#@rlu!z3JTYiyC zl3dM-`1yJNa3tUr?`x@uO!kYq(JwMa9+E{@#k4eE_@)L|drAdBOVXdo9s%z{x zBDBSJVfs=la3};6o}pe?`fd1NN|WjjD)xLZmBK=GOGKeuG?Qfax*#}t|7G~IQj8_L zvR`^i84XEO9S=v3@4G*N5Ta&NgHVIL9f(b)&vLfkImZ$dnnzTAiQqA!PVEGM0c!Nd zF21gWp$^xY;f>R!SB3x<`0qfem||Y3DUUiC9Hq!q!kXIOA#i}hoU3f=VMQj7fob6^ z&AB74_H#>mrcZhYSL*lMMPnZ&`nE{)BwK2lUvqxSa`xo;)OdnIqF+8}-;2T;J7g7e z{5If%sspSb0P%R_42NTjs!M%SNoeL4xUQ_^jeivob5YgM4!2f{J>B5cna{AU zwZ*F?ZqdF*r_A;_|7BB|*0SXB{q48J&#u#shk~1YkKUJqV{~$1Y3ZA0+I;Tv-CaX_ zbNuiRJlCqgnmQpe^r(Q1>#KtzHjFxb!m|s6aGgge%6ubb(BMpBPU{7WA=GtF^hveA zRNI2C2NBu5I;}1uWtKSmdOKhx}X>(G-$Kg=(uo_P|z1~Fl^tcBlhPP z_Dv-Y0ZtNn)$KHA53oy5C6HA$vV8l=ODavat*Sg#DmEqkU;%FY@|6>0FGCwgYa-*` z#t+E0miySsV`akhl$(UX?$*sD*p|hXR3!F5q*1S5$JEtJRf%@ekvx9pZZ+fJh-L(P zH1FZLM}%+(odFHE8lBVhmDBW=yR??bQm2q~9bt7H zleRAdDyZ|7b318c@NwLBh&_||C~95=XH=4VO{wQf5NEd= zHhZ@!6qb8z8T0#CwAYN|+uKx6l%D~WLxTLlR5RJ|EP2SDf#G<0Asl>8SXVEIWO4gr zqN-mMa;w5dv72^O)>y>$`dPWgn$AbEQ;5phcPfGv4rlPTNGptp!&I|n({)iqz`33D zwVJk{i7Q1x9{{2lge@N=3V&h&9UXr#4ybW}cIFfI&5!r3$!iqh(>hR}DE5IwO3)JH zMP%VvWusYBh;>anYnTPCvk_REIbcAF0{$Eg0$|ZgoU(jpS2kZX4z(hjS?vEQZ-Y;@j%k6E7xl}!nrfeEB0)vUu}GD(j`e4}^mkEGxzMDo=HAn~dsl51t9{!t zGABpgJ4aUTM-4f*Je|bj-#+w<8%cOnHck<(9u&g_YF4EsyP@HCu*OV<1O#p7*6bNgC0Jgq$oP@|y(1!CWQ~9RSi%MrRaVe zM`oD!&_|Rv6g8bvjHke=qbrQJX|NowqPd$Xcm3Qhp+MDBeEIo~eaL6mwh2gu!-%lr zK5z>qS%TB(h3S!ZNDVy^I}D^ahEX#$GVip7)xlbPf;>4MN&30;Q7pR2=pw8jlFo48 zZ#F)2Dq2mjY2_B`1O(=XvQAtG-o@z37!Vq*+^u_C6$OW+ss zFsKX>-IcDm-wf*~sO87QFwPMtz!;0y7kZ$4)b;k;Hm=_q*gJe|&l$ubKR!`X@SyBx zI?%j%9M>X=EeL$$ix8xthxS}OaI&*N=Tr+MA`h!55@9Prh!XcO z?dos;X7uOuCui=-!?V`vlp9fe9`eXcU6DhdY`OC447+uf^vt`auQVb*(S6@>vo^?M z_r8v!x#tGr`lPAWF4S4Y#N(ogfS;t2dSRW9j~u0n2nXzhx|Z>MktvCYeyWgVFVpqI11#1B!kH54aq$!(B4yWQOEIl0J^r+>*gi1^l$fHEd%Hfu zD7$AW=Xt=Y*Ik+Flsos4Oq2p@iEd)qgxKj(S~biB#>84$VqsJ|d*rqU0%6j!1FJgE zD^ym#j!>qMaq-HHRn~{Z+8E1+C+f1^NPfJ(@N+r}nUY zM0qhzo#O-+nQ@(LNM)p92OBj5tffM8NsD4?} zdHYxqaRhu>-Fm{aj!nc%qeD!YXJX)yD4(j)ai5O8m?Eofv`a=Y6&eiDiM=_(rC2DS zH;#4uny4qh)dQ+g*_P)CWt9J^eM4`?)|=Xy-5G;t$M33}rPmf;BkJc;sW4mqTQzJ* z(+6OFie{&qZxRcq56{jUPMBNFmSEV@;Ln;vf?JC)i7OGxAJNiv1mB4QcpXhAWw|TR99wK?bs!sII+%kqYHZeg z!#r|!MY5vV7irAcb3M#xZOOF4*31%1xN?9kq)Q1INt=lQ)*m^Pn^7HHS{HU(SInmI zN3n4} znZuDG4;GmxY-31P)YZB%XbEt^J!7c$-E91_s^~0+7U$M$4-|ABZ!scVo6x;F1Z)Dc z$G%8WX9v)Pt>EuMH7O$aG52!D21@UWtmHGE?vum?Z0^-O5s^TJR0zO`I+$KYBx$3l z=Y}NuWdrI)mttJ-YlIk>abo!*Ubnq)TU~KSjJvGu?x6U9F)p)DvgL^80jA#$FPpU_ zLob}ZH{*3fdpAM{aA^kmF5V?F6t@F?`8H~A3Y1N#;J4%r?soQ>ay>bBp!rg8qWvNk+6Yxx_v*~7W$eEurUhz3H9@-1 zFpz&o`R+M@5OMBGA=T^j%UfENto9W7J4&xwppyg}6vCyN?g7#32EeMIe-r@RhY9na zOMikB%c`FzLV2zqB&G6ic(!ntMZHR%4mFv+)-QGBRQY>mS>P7K* z+vZ6CRES@D+-FduL4Jcw`*j5Pb>JJEC-N8gFvhsle7zNQ(bu*qiyJfr<5);ytnndt zEORJIX+-}Rx50*Bh4EQ4|3x`R8srREX(0Pk(ktB-R@84FqBHJoq`ro%SA2^Am+V*GceE=1?0`p5Ppup0 z9#A<*mtS*+Ge)xC6=0`#NBAoG`A%LE{CjDSDwGV-WirN)l>BviFDPN_({EMNW=dAa z;*OG;I=dXDC3iTtz$X;o&ds2_3&wTwPez1<4vd}vPA{Xrn9D0K&Se` zGJ6&7P36h!1r;TamoV3-^@?=x1eGrTm%-c4eaSw;xc{@tw;vm#4;2o{Tv@Zme#FTrb>e$FB z+gap1A!dB9Mt%}7HVkK)Xq-$@uQEv=?nN1xVXR^5ULfKn*>4q+@aCy64|1q_Zr0?! z(znYHhqZT>ElA`=I&U)PCM3&;Hm})zHyRt{G7XZJbPyc_5_MePlW6l*Q5ds*>!L3e zg}O|UTZn_7V3V#3mn|;CVL2>S`HgosbA$?Sd-et}>f|m?qAlir3d%`kRZ+?;uNY3h z)GT4TCaFlg@?gF}X1*3y0h?+F^oV;L>uQzBV&aiyn*7E|O_tSC_YJnzIk?rhgXVS- zH!7Z;;CG(^>Qn#xBpq(2R`jG*6P}-iRW1U9x>L}n^e`8?0|Ei;tx_|{z;jv8wluAs z)xRj}CX2^*P!$Agl6Z?pGr_!F&SIc>0rO{hMQVmD@X@pAYG<*}3uI?e8KXksiptIN z(JX3UvlNd>P;k9oO3}_6cU|Y>*p9J6r=Y@8ePK2bOw8LXI`dA1#K!>H)r7d5&+zG4 z4!PY^ystAYxEdOeD*_Dgye3uXteI>n9P6pi>oCc5xR7}ELo1_slc1&%hbYPtUF|A< z6oNkz9a+l+!xxo{o@_w8i7n5{p~tLWHuOEp-AmL=7>!vRbLdIbHinH|P$UKHlHO}gi}R_%9?X}nj;--Mc9hCIzo6|v2`$E)}g))j-f&6%uyvj zQhRkp(9USya(~7ih_*SBTYj**qU~zt+wcdvbUw@gF2yPbjswHGy@>J4{eMQNy=4VS zvYy#-zoi950(v2i0`Syr&RFnWfoL9u!$GRlQ&Bjxb~UP*C-a_JNa&y^NEKqE{G95< zz``Fxf+D;`@Q+qRV@rKWFk_l8N3gK1rZI28I{PlomTeX!dD>&XKH0S&VKAJ(*gb(Q z;Kub;xdulJg@t5*`~2}!EK2R3TfuKQrrBV=^t`t2dg?cL1Z+ptTB^E9NsM>a zxq{z@A=_t67r);P8fVjE@vx}A4|Yb`p`P_%`vm4~7C+3kZ=l3sJz=J;nsLQ_FR>E# z{3J_<5lE(v1A`=$MJh4%1mKXNq>}~eYUDY~{p7PH4ovc+xRdlt5tVX*+P?fWZ`KK; zxAA?~7GA9%rQaH6hRE9E^Reuih$MMmr4no0N00!;8J=HPeDw-NU^D2wlA5-2(GM}j* zK@kbBZUNmx!ML7}kH_9Tb^PQP+=*scz5gASsOTuyeACIg!C*}iJrhr=k!G%GPQ!-k z#q6ubE*hhBmynWwif-m&ho>J<@_QOl*^@#&Zij+sm1;xU!vJ+*XYMa7z#P5v*?u{U z@5y@4dfpyxI#f573B$;^N73l=4kK=tT$qz-FWgxSwxpU_J?949v*M!{3@cUYOY46hG7SDncvO8N~KS~x93Wi zD|q?xYIK7#4@MP4*E`W6j~Ie?4$tJSklYC<8c9E)s|?=|&G#bsn5fMi!9m>0R#)Ug z)a9laxj_E#hCc8=at}XsI39oWCJqJ)ZK!!qhXLrseel6QQJ+lZDwU=ij&nx_A0U|h zePIHlQO|2WfngodbB?l5KT>GzT|4P$08%Um+=WB2^GXUv=ij|WV*`ufrO5~>}4 ze)lHeZTnQ_b9%8O8#!xm>}HUM%jrN;s?!$dC?9|^8W_QhLicC?BI!LYA_&_ z8sO`h>b=l$^%~j^+`vvVg_@$l`RM8E;r|5JPX2n2=du}?YyoZEX&#rf`vmjh0E7Ui zM!747x+N@iQ9r6}d(^S&4#+wg56IoAYu|MQD#Ng8FCgg~`t)|wrCwCO zbv=2$T@d;-40n;ZAYUSNTlkFo6%H9LcH&)T`~2j+vD`K5zPvt2ziLbE_C`;VzapvH zVB%TL+N#n3u2tCQBeJHizE!vK^mopaske+{-}cUYkUFN@Xg$T_*lAkTb|}Sa#%*p&;w<3W>dhVT;aF zHk7eDazg!4UjYIB313-TeZzT_s8#8eQv#M#5i`N`OsQ)~Cnxyul!DJ?NA!j*d8tht zW)p7V5k0!EE1KrggNO8B1rVNl4DDPT^fZw#q%XxhwvBN3OFM5^x2b=rG0MdZO9o(y$~3YcDBevp zuwO{45B(*%^PI%fA&HtDCOZRn>@>Q?%g1nP|ta`*|~zj$X&Bzg*cHZ^neXY_yi z+4DLXn>_;Qq4X%Co~z^d$gY_`-f_CLe=r|Pr*hk=h>0h5wBW<1r|oQK(ojAgaraA@ zRa*djGWk1myP?QKVWL(PK(~>sS#t=SA2?~~*VG|GG^08a&${6g+2y_c3+PldrcrM+;^2;vHzEVr@ zDZ0gDnFP{T-e+j$78c3d1+i3?p3pC>UH>%J3bwlSa1c4(@Zt2f5dYFd>|F&sJle<# z^Rg)SvQYX#u6H!~yM~b~N=JZV`uhrnD+9(Ec=U7H-lzUAS~nB zQ6;MKH@dTjL#$Px`>UZsjObv1NP(H|IA)CH5D$4pQ4e5oPJn<;pHw33+Ykb~{j5S6!NK1=G6F zu{~G@;1f4!??{913#HD0Lmyl!s4Q??5S>dI{adQRymVC)F8y7UlX|_e0 z6C^%r(4RC#iwN0Ln`U5o$O>RUcr2(chNn7{6Pix4}K@tQ&;+$gnWg`iC z71`C**26jEr+7Q_U|pl|Ypy~z$LAZt&Rs}SzY6~Vw5%$Wv9ORbzm-??$zzkUYUD3Hr675P7)k60G5=YJGb{qPVFg#V6# z-~lzx(*G4Qt&@bdmV|H%&o1If!asSE{fB!ZJrJB8 z1-iNtBoq$BzchY-iURt$Kn#Ux0CHaVSB|*|oBL6JLYv3>?;LYM%?tm^@#n%nHF{ZK z`Wr06A~B>PNM`Y06|-9;hS~swM#2A|f8!s(0BB-ST1=@10>Z`JhRxo?#hFb*MnYOe z=D)&`ZN>F3GJ%1BF#6NoWc!c!BN{+%4IKXzgW`{FO!nVfpbY;36mR|mBn6Ev5mEf< zh|2zZCywPmfK5GrfaIW{Wdsn@GR|M{|9^H65KR98PWbx2V1B6OWl;MvH`M$J=wg`! Ku5$Gs-2VXlmD1V( delta 8317 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 diff --git a/TheButtonAutoFlair/.classpath b/TheButtonAutoFlair/.classpath index d29df78..702b25c 100644 --- a/TheButtonAutoFlair/.classpath +++ b/TheButtonAutoFlair/.classpath @@ -5,5 +5,8 @@ + + + diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/Commands.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/Commands.class index dbb044812134c646238d78fa338c8b038cc56fe3..d5d26fa50f7f9437c6f6ce9b0796c7fd1f9c1cd0 100644 GIT binary patch literal 4203 zcma)9Yj_mZ8Gg@ZH?t%YE(-)!K^G9n1+rW!mqfsXiy{fcgj+ycC%Y%fkj+k*nT5on z)n2g_t-aZ#_NLXe1=|u!Lc~&}t%$a@#a{pPdHSP2`lJ2Rr+uuo()Y~ll3j>AeIA%S zbIzReUEcS5zmwPBd+8j2mH4BEfWQK`JMKJ~?v1-$vOVLvR@%t8R!7P(?f6Ekr^iSq z9SuQ&sRxWhMm%MtJL5ar56Fb8p;%zPWp~EgGu_>$8&CM3=eBL`lL;PW3l!gBrcHOf zKv6~IZh_!ND=AA*gi;+E!U9to&9vN}>1mhtPNO{~1tN`B!bt5lY*W2wCxdR6=?E-r z{6Ac-6PRSBvjGTnR5ZT7qpdQXly=<>zNl*)55Cp4&2(qo{_CeI_i30eFgwqZOuMGr zA8$?>{nDOf?YOqwo-wltD4 z!;Qu5_|7ib;IXZV&?ju8!&PxC)=_~7CQ>Trj^WYO0XVxYS*0+%(Rgbh!@mL0gET71qH@>+^eHS#ZY7Wa=1EPAP{rD%OvfDQ)?OI0VWAIH02xZnIY(~55~Q>^euX#Z-fV=Z==oi%PBmEj@mRgaJ9__#WzSoX1|9aWN_ z)bS~$$R#_i!|W|7%XU;XKBnW-s*QybDQVamJ|j?`v(=F4=#Uh^7P3on?Qv!#x2F8? z=Sy%LpH*akQeaw^*;z;HRB;`{=hf;L=<@igzm@A@d`UpCVyf|F9RnDoE39af(y(}< zGMOOjDvYOfd=+0~!g@2@xh8*SR{ry#%r%7TrKic=B_56)$y%tnk>hY zxaV~YDT&kkLUNRfd`HK3af0k+JFyM#`cR(hWnRD9nw@9kdja3q@V#6{3s!af0H?@- zwCrOrh21dgyW0Pvjvp$JHR{iHej3Jzz|AaOzjD~xd}hQth?T0wNjQU-G>jE?oqora zJvz?fWv0(k>B}|-g4oRKf=k7bMh|u99L{U_ajr2GF6($jH9xIa?MS7=_z7RURy(gm zDcH}H2)=ra_Dujpq4tIGn!qyZM}0abRo{+TiA08!tckTssp502l#F$7At~AZQ;x4X zuL~^6s!p!Qx69a$X4Tb|R(V>Mz4ECY8h)M&%ey3Q?o*A{w9-UDWslv{Crggl0)ci` z`RuE+g|(t&B1P(u+LQ{RD!Iq$=xSLhLToxl!R1;MP@;QlbasCSahN?zUa*BfhbUur{NgZVz>;4Crj46C0_?X5gHwRuskOx6LQT+-c z1L8>ac|>YM(crn@GYA!(9L9`jXbd+AjNz651~EArirhAaMF9j)MuSBw+G>kOP<4W* zLTuop=)~gFJP!-TO8RK%tifU)jnEz?>o@nSSTH7MKMzJTV zji7A=_j^GM;V1)oAUi&izsa{gZckay^KB4o^52`eI-aURU)pIxW=%vn?#zzMqMZWJXp$4^42c=%h-e2jk;d!0}Y#J&jOCFay(3&SwRm%Q1_82t}#tbMX{z!E=q zR=8Lv`mtUd!JXn^G>AvASv-a<;yAB#icT#)WwLZ4dC-Hjq8LXOdPzVvItZIFsF4Gg zG%FJhGB`vAU&2xx=Bh^PQ~eS8cvR8u)^LE&P2qs{4g~+{ zC{Z_rEPQ(4fW8l?)0DnJ=huR_^8O5WG)g$=m0RA$JPmJNHpvE0*JB#CO z)uVV~6rXDv!knd%FOJ};+8{qsjE)9_E5`7ZBJ5c*g0Hu2zj)=(96U3O=SJ}D+RzX- zDhi$yWLrdSnh_0-7svn>=Fen#P#g_Li_f6l|7leFhXn?&j73h@2I=?YDs={HitS_= zqtW09el&#T8|0kh-8&o;Mtmx4}fCz{OHfZ?_et}=oyH!NyO%gLe>rwpL zqsLyt?~m$9@XH=i4)G70x9Clfo=o=WQOq-D;Wyk7f7Qf?piZb`2wCp`pYj{Y* xF;eCo%)Y`;i%FuZbL7Vhz=kVKM<{=up95F8DmV)?Xn13OfN%Ic4-ViD{{s-|SLgr$ delta 1092 zcmZvb-%lJ>6vsbzhS?c*2e1p>W9Fp&%H_d-DrrFF-qNb41X-&|{%zZJs0P-_{coCeJIj)lsu< zZZ0uh%x7|Qhf0}j+RI0XGHEkKx1x2iRHP) zovjAVpsvM#A$nb1@y|p?E63#)wa@o{YsuPGi`@H7)*dGm?XU9aGVLpBpE!@#of|7^ z`x--zQKM5)W#l?rHv3P{tntjo?lNcB=ven_9M$-l_^|01w-`SegeMf=S2*?^(~eo? zr79ox>tT%*K6Q*}x<=jpX!D_lt_>xDu1%_!ncDCxRRWH>m|^pO z^jePLn7U&+R+V#A&etUhb8ek^i`a|nwxO>!t?H}t2X$~t zI%t4)c|BVz2x|c)R{0u5N@(?9nYToF zuziswnrKm%d7F1IMAT8O-v9sr diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain$1.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain$1.class index 5565623edd1067404ca877c2ebf8e789d63da4f0..6a80d9719ff2339596f8b26c3fe1dce1c709d6c5 100644 GIT binary patch delta 19 ZcmZ3?x|nr?4ijVeWL+kEAeqZ#1^_nZ1sDJT delta 19 ZcmZ3?x|nr?4ilrtWL+kEAeqZ#1^_ko1o{8~ diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain.class index 1d3ffab97222e5021244a092b5426d16c74f1d82..5e717d336b020cbf4a5a6081a2c0df44beeee2ea 100644 GIT binary patch literal 12702 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 E0qJ{~mH+?% diff --git a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java index af8da27..ad08b24 100644 --- a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java +++ b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java @@ -1,5 +1,9 @@ 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; @@ -27,7 +31,8 @@ public class Commands implements CommandExecutor { if(!PluginMain.AcceptedPlayers.contains(player.getName())) { String flair=PluginMain.PlayerFlairs.get(player.getName()); - player.setDisplayName(player.getDisplayName()+flair); + //player.setDisplayName(player.getDisplayName()+flair); + PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. PluginMain.AcceptedPlayers.add(player.getName()); player.sendMessage("§6Your flair has been set:§r "+flair); } @@ -42,22 +47,71 @@ public class Commands implements CommandExecutor { if(!PluginMain.IgnoredPlayers.contains(player.getName())) { PluginMain.IgnoredPlayers.add(player.getName()); - String dname=player.getDisplayName(); + //String dname=player.getDisplayName(); String flair=PluginMain.PlayerFlairs.get(player.getName()); - player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + //player.setDisplayName(dname.substring(0, dname.indexOf(flair))); + 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; default: return false; } return true; } - // If the player (or console) uses our command correct, we can return true - return false; + if(args[0]=="reload") + DoReload(null); //2015.07.20. + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + if(player==null || player.isOp()) + { + 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.Players) + { + if(PluginMain.PlayerFlairs.containsKey(p.getName())) + { + String flair=PluginMain.PlayerFlairs.get(p.getName()); + PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + } + } + String msg="§6Reloaded config file.§r"; + if(player!=null) + player.sendMessage(msg); + else + System.out.println(msg); + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); } } diff --git a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java index 2715e75..c5f649b 100644 --- a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java +++ b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java @@ -20,6 +20,9 @@ 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: @@ -65,6 +68,18 @@ public class PluginMain extends JavaPlugin } 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(); + } } catch (IOException e) { System.out.println("Error!\n"+e); } @@ -117,6 +132,12 @@ public class PluginMain extends JavaPlugin public void ThreadMethod() //<-- 2015.07.16. { + /*System.out.println("Sleeping for 5 seconds..."); //2015.07.20. + try { + Thread.sleep(5000); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } //2015.07.20.*/ while(!stop) { try @@ -192,6 +213,8 @@ public class PluginMain extends JavaPlugin public static ArrayList Players=new ArrayList(); public static ArrayList AcceptedPlayers=new ArrayList(); //2015.07.16. public static ArrayList IgnoredPlayers=new ArrayList(); //2015.07.16. + //public static Map PlayerTowns=new HashMap(); //2015.07.20. + public static Map TownColors=new HashMap(); //2015.07.20. public Boolean HasIGFlair(String playername) { /*Player player=null; @@ -241,6 +264,8 @@ public class PluginMain extends JavaPlugin finalflair=""; break; } + if(finalflair.length()==0) //<-- 2015.07.20. + return; PlayerFlairs.put(playername, finalflair); PlayerUserNames.put(playername, username); /*for(Player player : Players) @@ -279,9 +304,94 @@ public class PluginMain extends JavaPlugin if(IgnoredPlayers.contains(player.getName())) return; if(AcceptedPlayers.contains(player.getName())) - player.setDisplayName(player.getDisplayName()+flair); + //player.setDisplayName(player.getDisplayName()+flair); + 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. + //System.out.println("A"); + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getDisplayName(); + ArrayList Positions=new ArrayList<>(); + //System.out.println("B"); + for(int i=0; i=colors.length) + { + //System.out.println("D"); + int x=0; + for(int i=0; i towns = TownyUniverse.getDataSource().getTowns(); + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock().getTown(); + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static void RemovePlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); + String dname=player.getDisplayName(); + player.setDisplayName(dname.substring(dname.indexOf(color)+3, dname.indexOf(flair))); } }